由于CodeIgniter开箱即用,它支持每个唯一 url 一个控制器。所以,假设我的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 部分的数组。