【问题标题】:Creating an admin section controllers and views in Code Igniter 2.0在 Code Igniter 2.0 中创建管理部分控制器和视图
【发布时间】:2012-08-27 17:37:15
【问题描述】:

我已经使用 about、products 等控制器创建了我的网站......这给了我 example.com/about/ 等......

如何创建具有相同控制器名称的管理部分,例如 example.com/admin/about 或 example.com/admin/products ?

如何组织我的控制器?

【问题讨论】:

    标签: codeigniter codeigniter-2


    【解决方案1】:

    另外 2 个选项来补充 WebweaverD 答案。

    1. 使用Modular Separation
    2. 创建第二个应用程序文件夹和索引文件,负责管理,将它们连接到同一个系统文件夹。

    设置后,第二个选项非常容易管理。有一些变化,但我发现下面的结构是最方便的。

    mykewlwebsite.com
      apps/
        frontend/
          app/            frontend codeigniter application folder
          public/
            index.php
            assets/       frontend js, css, images
        backend
          app/            backend codeigniter application folder
          public/
            index.php
            assets/       backend js, css, images
      config/
        database.php
        constants.php
      system/             codeigniter system folder
    

    database.php 文件包含来自 CodeIgniter 的 config/database.php 的代码,并为项目的所有应用程序共享 - 只需删除所有代码并将 require_once('../../../../config/database.php'); 添加到 config/database.php

    index.php公用文件夹内的文件有两个重要的变量$system_path$application_folder,改成

    $system_path = '../../../system/codeigniter';
    $application_folder = '../app';
    

    constants.php 文件可以包含一些常量,例如来自index.php 文件的ENVIRONMENT 常量和其他一些常量。只需 require_once() 它来自 index.php 文件。

    虽然有利也有弊。

    优点

    对于那些在 localhost 上开发并通过 FTP 或其他系统部署到服务器的人来说,只需上传一个文件夹 - apps 并覆盖目标文件夹,而不必担心覆盖 database.php 设置(我相信大多数你们中的他们与当地的不同)。

    再添加一个应用程序很容易 - 只需复制现有的一个。您可以根据需要添加任意数量的应用程序 - api、ajax、用户文件柜等。

    缺点

    如果您的域为 mykewlwebsite.com 并且能够向其中添加子域,则应使用此结构,因此您只需为每个子域配置主文件夹:

    mykewlwebsite.com:路径/to/mykewlwebsite.com/apps/frontend/public/

    admin.mykewlwebsite.com:路径/to/mykewlwebsite.com/apps/backend/public/

    api.mykewlwebsite.com:路径/to/mykewlwebsite.com/apps/api/public/

    【讨论】:

    • 模块化分离对我来说是新的,所以我不能对此发表评论,但建议 2 对于大型应用程序来说是一种非常好的方法(我应该想到的)——它将完全保留管理方面分开,您可以让所有危险的数据库查询远离用户(至少在任何方法中都应该使用单独的模型)。
    • 是的,我自己总是使用第二个,如果需要在两个应用程序之间共享某些模型,您可以通过两种方式进行 - require_once()third-party packages
    • 所以只需添加另一个名为 Application_2 的文件夹?是否有关于如何执行此操作的指南?
    • 不需要指南。我将更新我的答案,以便稍后获得有关如何操作的更多信息
    • 原来我的回答实际上变成了指南 :)
    【解决方案2】:

    你有几个选择:

    1) 创建子文件夹 - 将它们放在控制器目录中名为 admin 的文件夹中(在 application/contollers/admin/products.php 中)

    这里的警告是,您只能深入一个文件夹,否则 codeigniter 会感到不安。此外,它将首先使用第一级控制器/方法,因此请注意命名冲突 - 例如,如果您有一个带有产品方法的管理控制器,它将在它在管理目录中查找产品控制器之前被调用。 (访问 example.com/admin/products 时)

    2) 使用路由文件 - 如果只是您担心的 url,您可以随意调用控制器并使用 application/config/routes 将这些路径重定向到你想要这样的控制器:

    控制器名称:admin_products.php

    路由文件:

    $route['admin/products'] = "admin_products";
    

    3) 为所有人使用主控制器 - 最后的选择是拥有一个管理控制器并在其中使用命名方法,例如,您有 admin.php 控制器,其中包含 products 方法然后它将由 admin/products uri 调用(尽管在大型应用程序/站点中这可能会变得混乱 - 不推荐)

    希望我已经为您解释了这一点,如果您需要任何澄清,请询问,我会尽力详细说明。

    【讨论】:

      猜你喜欢
      • 2011-03-03
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 2013-11-19
      相关资源
      最近更新 更多