CodeIgniter:从子文件夹访问视图

时间:2017-03-18 04:40:07

标签: codeigniter model-view-controller views models controllers

我正在努力学习这些日子里的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

根据管理员后端和用户后端,子文件夹中还有控制器和模型。

我将如何访问它们?

我在这里只是想表明我遇到了什么样的问题.. 所以现在,如果您只是指导专家如何处理和构建组件以及最佳实践是什么,那么问题的所有答案都可以得到解决。

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

在这里需要帮助。 在此先感谢!

2 个答案:

答案 0 :(得分:0)

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

  1. 查看文件存在
  2. 您指定了正确的路径
  3. 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。

答案 1 :(得分:0)

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

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