我正在设计一个带有代码点火器框架的PHP应用程序,我已经以MVC的形式构建了它,但是我对如何创建事物感到困惑。我目前的问题是,在存储会话中的用户日志并在控制器中访问后,模型对当前会话一无所知,因此我发现自己每次想使用该模型(IE 更新或获取用户信息)时都必须向它传递 userID,这似乎效率低下,每次都必须继续这样做。我想知道是否有更好的方法,或者我在组织代码的方式上是否犯了错误。
示例:您有一个包含一堆用户方法的控制器。您已经在单独的控制器中登录了用户,并且正在使用 cookie 和数据库会话
在控制器中创建构造函数
public function __construct() {
parent::__construct();
$this->load->model( 'users' );
// return the $user object
if ( ! $this->user = $this->users->returnUserFromCookie() ) {
redirect( '/login/', 'refresh' ); }
// assign the id
else { $this->userID = $this->user->id ; }
} //
如果用户对象没有从用户模型中返回,则我们重定向到登录。
否则,$this->userID 现在可用于控制器中的任何方法、在模型中调用的任何方法以及调用的任何视图。
function showHistory(){
$history = $this->users->returnHistory($this->userID) ;
}
在这种情况下,由于我们也有$this>用户对象,因此我们可以以任何方式从中提取其他数据。
function sayHello(){
$data['greeting'] = 'Hello ' . $this->user->first . ' ' . $this->user->last ;
}
我们不必将$user或$this->user传递给sayHello(),因为它已经可用。而且我们不必测试是否设置了$this>user,因为该检查是在构造函数中完成的。如果未设置 $this->用户,则从不使用控制器。
您可以将$this>用户分配给$data,从而使视图中更清晰。
在控制器方法中分配给数据并将$data传递给视图
$data['user'] = $this->user ;
$this->load->view( 'history', $data );
现在在您看来,您不需要$this->因为我们有一个$user对象。
<?php echo 'Hello ' . $user->first . ' ' . $user->last ; ?>
========= 编辑
感谢您的回复,您如何访问模型中的$user?
与控制器示例完全相同。 $this->用户->ID等
就像模型如何知道要对哪个用户执行数据库操作一样 当你调用它时。
它将是您在构造函数中调用(或返回)的用户。因此,如果您调用$this->用户,其中 ID = 100 ,那么这就是模型可用的。
您也可以使用帮手程序,这对您有很大帮助。
像MVC一样,我们可以使用可以在任何地方使用的辅助功能。您也可以创建自己的帮助程序。
使用以下函数加载帮助程序文件非常简单:
$this->load->helper('name');
其中 name 是帮助程序的文件名,不带.php文件扩展名或"帮助程序"部分。
例如,若要加载名为 url_helper.php 的 URL 帮助程序文件,应执行以下操作:
$this->load->helper('url');
欲了解更多信息,您可以点击此链接 代码点火器