CodeIgniter:从子文件夹访问视图

Posted

技术标签:

【中文标题】CodeIgniter:从子文件夹访问视图【英文标题】:CodeIgniter : accessing views from sub folders 【发布时间】:2017-03-18 04:40:06 【问题描述】:

这几天我正在努力学习 codeigniter,我正在努力根据路由理解视图、控制器和模型的结构以维护安全性。

那么,我们应该如何构建我们的视图、控制器和模型,用于管理后端和用户后端,我的意思是文件夹、子文件夹和路由?

首先我想提一下我是如何整理文件的: 我的路线:

$route['default_controller'] = 'site/home';
$route['home'] = 'site/home';

所以这里的默认控制器是 Site.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Site extends CI_Controller 

/**
 * Index Page for this controller.
 *
 * Maps to the following URL
 *      http://example.com/index.php/welcome
 *  - or -
 *      http://example.com/index.php/welcome/index
 *  - or -
 * Since this controller is set as the default controller in
 * config/routes.php, it's displayed at http://example.com/
 *
 * So any other public methods not prefixed with an underscore will
 * map to /index.php/welcome/<method_name>
 * @see https://codeigniter.com/user_guide/general/urls.html
 */
public function index()

    $data['body']='site/home';
    $this->load->view('includes/template',$data);


public function home()

    $data['body']='site/home';
    $this->load->view('includes/template',$data);



public function AnotherMethod()

    $data['body']='site/AnotherPage';
    $this->load->view('includes/template',$data);


我的视图模板是(views/includes/template.php):

<?php
//load head
$this->load->view('includes/header');

//load body
$this->load->view($body);

//load footer
$this->load->view('includes/footer');

?>

因此,如果我这样放置,我在从子文件夹访问视图时遇到问题。例如,

directory : views/site/userbackend/index.php
or views/site/adminbackend/index.php

并且根据admin backend和user backend,子文件夹中还有controllers和models。

我将如何访问它们?

我在这里只是想说明我遇到了什么样的问题.. 因此,现在所有问题的答案都可以解决,只要您将我引导到专家如何操作和构建组件以及最佳实践是什么的场景。

我知道我一次让这个问题变得很复杂,很抱歉,如果你想让我更清楚地了解一个主题,请告诉我,我会更新我的问题。

在这里需要帮助。 提前致谢!

【问题讨论】:

developers.ph/codeigniter/… 这可能会有所帮助 @MalikMudassar 感谢您的链接,我会调查一下。 【参考方案1】:

所有视图都对所有控制器可用,如果:

    查看文件存在 您指定了正确的路径

views/site/userbackend/index.php 应该是 $data['body'] = 'site/userbackend/index';


如果我的简单项目有这样的结构:

controllers
   backend
      Admin.php
      Admin_users.php
      ...
   Main.php
   News.php
   ...
views
   backend
      main
        header.php
        footer.php
      users
        view_list.php
        view_form.php
   frontend
     main
        header.php
        footer.php
        sidebar.php
     news
        view_list.php
        view_item.php
     mainpage.php
   ...

在 view_list.php 中:

$this->load->view('frontend/main/header');
<news list>
$this->load->view('frontend/main/footer');

我练习 HMVC。

【讨论】:

在你的情况下,你能简单地告诉我你将如何请求管理控制器在路由的帮助下加载后端视图(view_list.php)吗? CodeIgniter 中的路由只适用于控制器。在我的项目中,我总是使用直接路径来查看。但是,如果您愿意,您可以为视图进行自己的路由。您甚至可以使用函数 view() 和条件将 CI_Loader 扩展为 MY_Loader。如果你想知道当前的控制器和方法:$router =&amp; load_class('Router'); $controller = $router-&gt;fetch_class(); $method = $router-&gt;fetch_method();【参考方案2】:

我遇到了类似的问题,并通过将.php 添加到视图路径使其适用于子文件夹中的视图,就像这样:

$this->load->view('includes/template.php',$data);

【讨论】:

以上是关于CodeIgniter:从子文件夹访问视图的主要内容,如果未能解决你的问题,请参考以下文章

如何从子视图访问 ParentViewController 方法?

从子视图访问属性到 ViewController Swift

从子视图中访问 UIViewController 方法

如何在 SwiftUI 中随时从子视图作为父视图访问数据?

如何从子视图控制器访问父视图控制器的视图?

iPhone 从子视图访问导航控制器