我正在建设一个使用Codeigniter的网站,我真的很喜欢MVC模式中的URL如何用于引用控制器方法。这看起来非常符合逻辑和直观,但我似乎正在用这种模式运行一系列问题!MVC的URL问题(Codeigniter)
所以我建立了活动网站,目前我传递的一切通过一个主站点控制器,传递一些参数:
public function index($page = NULL, $city = NULL, $type_venue = NULL, $slug = NULL)
{
// if the page argument is empty show the homepage
if(! ($page))
{
$page = 'home';
}
// create an array for passing to the views
$data = array(
'title_city' => $city,
'title_type_venue' => str_replace('-', ' ', $type_venue),
'locations' => $this->locations_model->load(),
'events' => $this->events_model->load($city, $type_venue, $slug),
'venues' => $this->venues_model->load($city, $slug)
);
// construct the page layout with the following views
$this->load->view('partials/head', $data);
$this->load->view('partials/header', $data);
$this->load->view('content/'.$page, $data);
$this->load->view('partials/footer');
}
这工作得很好,因为它为以下URL加载内容:
site.com/events/bristol/open-mic/city-varieties/another-incredible-event
site.com/events/bristol/open-mic/city-varieties/
site.com/events/bristol/open-mic/
site.com/events/bristol/
但是如果我想通过这个控制器通过其他任何不是一个事件,即注册/用户,我必须写这个特定的路线!
值得注意我的路由是:
$route['(:any)'] = 'site/index/$1';
我可以写不同的控制器为每个实体,即事件,场馆,城市,但每个人看起来在很大程度上类似于上述(正确吗?),每个都需要获取数据的参数。
我的问题是 - 什么是开发像这样的长查询字符串的最佳做法?单个控制器是否正确?它不喜欢它,但是随后多个控制器会违反DRY,只是因为它们都需要非常类似的数据。任何帮助感谢!
虽然它可能不是DRY,即使代码相同,我也倾向于将我的代码拆分为单独的控制器。它降低了代码的复杂性,并且意味着对一个部分进行更改或添加独特功能并不意味着改变影响整个网站的代码。 – Jeemusu