我应该如何在 CodeIgniter 中构建我的应用程序


How should I structure my application in CodeIgniter?

我正在设计一个带有代码点火器框架的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');

欲了解更多信息,您可以点击此链接 代码点火器