MVC URL问题(Codeigniter)

时间:2013-10-30 22:22:48

标签: codeigniter url url-routing pathing

我正在使用Codeigniter构建一个网站,我真的很喜欢在MVC模式URL中如何使用引用控制器方法。这似乎非常符合逻辑和直观,但我似乎在使用这种模式运行一系列问题!

所以我正在构建一个活动网站,目前我正在通过一个主站点控制器传递所有内容,并传递了许多参数:

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');
}

这样可以正常工作,因为它会加载以下网址的内容:

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,因为它们都需要这么多类似的数据。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

避免将所有内容放入单个控制器中;更进一步,在每个控制器中,避免将所有内容放入单个索引函数中。

无需为Codeigniter中的每个功能编写特定控制器 - 建议您在手册中再次阅读该部分。如果您遵循正常的准则,大多数路由将自动为您完成。

您尝试使用单个控制器或函数的次数越多,您以后就越需要添加不可测试的,无法管理的,不可扩展的条件代码。