【发布时间】:2012-08-27 17:37:15
【问题描述】:
我已经使用 about、products 等控制器创建了我的网站......这给了我 example.com/about/ 等......
如何创建具有相同控制器名称的管理部分,例如 example.com/admin/about 或 example.com/admin/products ?
如何组织我的控制器?
【问题讨论】:
我已经使用 about、products 等控制器创建了我的网站......这给了我 example.com/about/ 等......
如何创建具有相同控制器名称的管理部分,例如 example.com/admin/about 或 example.com/admin/products ?
如何组织我的控制器?
【问题讨论】:
另外 2 个选项来补充 WebweaverD 答案。
设置后,第二个选项非常容易管理。有一些变化,但我发现下面的结构是最方便的。
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/
【讨论】:
require_once() 和 third-party packages
你有几个选择:
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 调用(尽管在大型应用程序/站点中这可能会变得混乱 - 不推荐)
希望我已经为您解释了这一点,如果您需要任何澄清,请询问,我会尽力详细说明。
【讨论】: