我正在设计一个带有代码点火器框架的PHP应用程序,我已经以MVC的形式构建了它但是我对如何创建事物感到困惑。我当前的问题是,用户登录会话后存储并在控制器中访问,模型不知道当前会话的任何内容,所以我发现自己每次要使用模型时都必须传递userID( IE更新或获取用户信息)这似乎每次都必须继续这样做效率低下。我想知道是否有更好的方法,或者我在组织代码的方式上犯了错误。
答案 0 :(得分:0)
您也可以使用帮助您的帮助。
与MVC一样我们可以使用可以在任何地方使用的辅助函数。 您也可以创建自己的帮助者。
使用以下函数加载帮助文件非常简单:
$this->load->helper('name');
其中name是帮助程序的文件名,没有.php文件扩展名或“帮助程序”部分。
例如,要加载名为url_helper.php的URL帮助程序文件,您可以执行以下操作:
$this->load->helper('url');
有关详情,请点击此链接Codeigniter
答案 1 :(得分:0)
示例:您有一个带有一堆用户方法的控制器。 您已经在单独的控制器中登录用户,并且您正在使用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->用户传递给sayHello(),因为它已经可用。 ,我们无需测试$ this-> user是否已设置,因为该检查是在构造函数中完成的。如果未设置$ this-> user,则永远不会使用控制器。
您可以将$ this->用户分配给$ data。这使你的视图更清晰。
在控制器方法中分配数据并传递$ data到视图
$data['user'] = $this->user ;
$this->load->view( 'history', $data );
现在在您看来,您不需要$ this->因为我们有一个$ user对象。
<?php echo 'Hello ' . $user->first . ' ' . $user->last ; ?>
=========编辑
感谢您的回复,您如何在模型中访问$ user?
与控制器示例完全相同。 $ this-&gt; user-&gt; id等
就像模型如何知道用户在数据库操作上做什么一样 当你打电话时。
它将是您在构造函数中调用(或返回)的用户。 因此,如果您调用$ this-&gt;用户,其中id = 100,那么这将是模型可用的内容。