1

无论常规路径如何,我可以将codeigniter的MVC结构的模型和视图文件夹放置到不同的位置吗

application/views
application/models

到其他地方,可以说

abc/views
pqr/models

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

先感谢您

4

4 回答 4

3

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

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

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

例如,如果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

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

于 2013-07-24T12:57:21.680 回答
1

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

  • 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->load->mymodel('folder/model');

而对于视图,

$this->load->myview('views','view_dir/view-php-file', $data);
于 2014-06-27T21:07:31.573 回答
1

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

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

看看下面的例子:

修改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 中给出

于 2020-05-22T18:18:28.943 回答
0

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

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

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

希望这会有所帮助。

于 2013-07-24T12:43:18.787 回答