【问题标题】:separating Model folder, view folder and controller folder in codeigniter在 codeigniter 中分离模型文件夹、视图文件夹和控制器文件夹
【发布时间】:2013-07-23 22:06:15
【问题描述】:

我可以将codeigniter的MVC结构的模型和视图文件夹放置到不同的位置而不考虑常规路径

application/views
application/models

到其他地方,比如说

abc/views
pqr/models

在项目文件夹之外。 如果可能的话,我该如何实现呢。

提前谢谢你

【问题讨论】:

  • 尝试搜索HMVC Codeigniter

标签: codeigniter project directory-structure


【解决方案1】:

在 CodeIgniter 当前稳定版本中没有自定义 modelsviews 路径的功能(在 CI 3.x 中,您可以更改 view 路径以及 applicationsystem ).

但您可以在典型的 viewsmodels 文件夹之外加载文件。

文件的路径是相对的。因此您可以使用../ 在路径中上一级UP

例如,如果abc 文件夹位于application 附近,则应使用../../abc 到达该文件夹。

看看下面的例子:

型号:

class Model_name extends CI_Model {

    public function baz($value='')
    {
        return $value;
    }

}

控制器:

class Foo extends CI_Controller {

    public function bar()
    {
        $this->load->model('../../pqr/models/model_name');

        $data['var'] = $this->model_name->baz('Yes It Works!');

        $this->load->view('../../abc/views/view_name', $data);
    }

}

查看:

<?php echo $var; ?>

这里是示例文件夹结构:

application
system
pqr
   /models
          /model_name.php
abc
   /views
         /view_name.php

作为旁注:确保对pqrabc 目录的直接访问受到限制。在其中添加一个.htaccess 文件,内容为Deny from all

【讨论】:

  • 这个解决方案如果放在单个服务器上是正确的。假设如果开发人员在说192.168.1.2/test/ 上创建一个控制器,并且在说192.168.1.3/xyz 上创建了各自的视图,那么对于这种情况我应该怎么做。现在可以吗
  • 我强烈建议您改变策略,查看at here 了解更多信息。
  • 我得到了你的关注。但我计划仅在开发阶段实施。我尝试使用您提供的编辑 php.ini 文件的链接中所述的方法。还是行不通。我通过以下方式拨打电话,$this-&gt;load-&gt;view('http:/ /192.168.1.3/t2/welcome_message');
  • 因为这不是CI_Loader::view(); 的工作方式。 CI 尝试包含来自APPPATH.'views/' 的视图文件,并且在包含视图文件之前完成了许多检查,例如file_exists();。顺便说一句,你可以手动include()你的文件,但在此之前,extract()你的传递$data
【解决方案2】:

要自定义“应用程序”文件夹之外的模型和视图,请按照以下简单步骤操作,

  • 在 'application/core' 目录中创建 My_Loader.php 文件
  • 将以下代码复制到自定义的My_Loader.php

    class MY_Loader extends CI_Loader {
    
    function mymodel($model, $folder = '',$vars = array(), $return = FALSE) {
    
        array_push($this->_ci_model_paths, "");
        parent::model($model);
    }
    
    
    function myview($folder, $view, $vars = array(), $return = FALSE) {
            $this->_ci_view_paths = array_merge($this->_ci_view_paths, array(APPPATH . '../' . $folder . '/' => TRUE));
            return $this->_ci_load(array(
                    '_ci_view' => $view,
                    '_ci_vars' => $this->_ci_object_to_array($vars),
                    '_ci_return' => $return
            ));
    }
    
    • 保存文件并在控制器中,调用并加载模型(位于应用程序文件夹之外):

    $this-&gt;load-&gt;mymodel('folder/model');

对于视图,

$this->load->myview('views','view_dir/view-php-file', $data);

【讨论】:

    【解决方案3】:

    默认情况下,CodeIgniter 当前稳定版本中没有自定义模型和视图路径的功能(而在 CI 3.x 中,您可以更改视图路径以及应用程序和系统)。

    但是您可以通过在文件 {CI DIR}/system/core/Loader.php 和主 index.php 文件中更改它来做到这一点。 p>

    看看下面的例子:

    在CI 3.x中修改Loader.php文件

    第 80 行读取

    protected $_ci_model_paths =    array(APPPATH);
    

    改成

    protected $_ci_model_paths =    array(MODELPATH);
    

    在主index.php文件中,添加

    $model_folder = 'pqr';
    

    define('MODELPATH', $model_folder);
    

    自定义视图文件夹路径,已在 CI 3.x 中给出

    【讨论】:

      【解决方案4】:

      我不确定您是否可以将视图和模型移动到不同的位置,但您可以将应用程序文件夹的位置更改为您选择的位置。

      您可以将您的应用程序目录移动到不同的位置,然后打开您的 index.php 文件并使用新的路径值设置 $system_folder 和 $application_folder 变量,最好使用完整路径,例如'/www/MyUser/system'。

      参考:http://ellislab.com/codeigniter/user-guide/installation/index.html

      希望这有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-20
        • 1970-01-01
        相关资源
        最近更新 更多