1

我正在使用 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');
}

这很好用,因为它会加载以下 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,只是因为它们都需要非常相似的数据。任何帮助表示赞赏!

4

1 回答 1

1

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

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

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

于 2013-10-31T08:42:38.457 回答