【发布时间】:2013-05-14 22:41:59
【问题描述】:
由于 CodeIgniter 开箱即用,它支持每个唯一网址使用一个控制器。 所以,假设我的 routes.php 文件中有以下网址:
$route['default_controller'] = "homepage";
$route['404_override'] = "homepage/not_found";
$route['^products$'] = "product/list";
$route['^product/(:any)$'] = "product/details";
我的网址将如下所示:
- 产品列表 => http://www.mywebsite.com/products
- 产品详情 => http://www.mywebsite.com/product/my-custom-product
在我构建产品列表的控制器中,我为每个产品创建 url,如下所示:
$this->db->from('products');
$products_result = $this->db->get();
$data['products'] = array();
foreach ($products_result->result() as $row)
{
$data['products'][] = array(
'title' => $row->title,
'image' => $row->image,
'url' => site_url('product/' . $row->url)
);
}
$this->load->view('products/list_view', $data);
但是每个 url 都有太多的冗余。每次我想在某处回显时,我都必须写下 url。如果我想更改 url,我必须打开每个 php 文件并将它们全部替换。
问题:难道没有我可以用来调用控制器名称及其方法的“方法”,并且“方法”会返回该控制器的 url 吗?像这样的:
build_site_url('product/details', array('my-product-url'));
其中第一个参数是控制器及其方法(因为 url 模式只存在一个控制器),第二个参数是 url 部分的数组。
【问题讨论】:
-
不要将
^...$放在你的路由中——Router 类会为你做到这一点。 -
现在我在
_parse_routes()方法中看到了它。谢谢。我希望我能再次投票给你:)
标签: php codeigniter