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

时间:2014-11-14 03:04:37

标签: php codeigniter

我正在设计一个带有代码点火器框架的PHP应用程序,我已经以MVC的形式构建了它但是我对如何创建事物感到困惑。我当前的问题是,用户登录会话后存储并在控制器中访问,模型不知道当前会话的任何内容,所以我发现自己每次要使用模型时都必须传递userID( IE更新或获取用户信息)这似乎每次都必须继续这样做效率低下。我想知道是否有更好的方法,或者我在组织代码的方式上犯了错误。

2 个答案:

答案 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,那么这将是模型可用的内容。