【问题标题】:MVC URL issues (Codeigniter)MVC URL 问题 (Codeigniter)
【发布时间】:2013-10-30 22:22:47
【问题描述】:

我正在使用 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,只是因为它们都需要非常相似的数据。任何帮助表示赞赏!

【问题讨论】:

  • 虽然它可能不是 DRY,但即使代码相同,我也倾向于将我的代码拆分为单独的控制器。它降低了代码的复杂性,并且意味着对某个部分进行更改或添加独特的功能并不意味着更改影响整个网站的代码。

标签: codeigniter url url-routing path-finding


【解决方案1】:

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

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

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

【讨论】:

  • 我知道这一点,但我问这个问题是因为感觉单独的控制器不是最有效的方法,因为会有很多重复。这是一个非常具体的问题,但绝不是独一无二的,这就是为什么我对找不到答案感到沮丧。
  • 如果您正确设置了控制器,则不会。阅读:philsturgeon.co.uk/blog/2010/02/…
  • 谢谢,我正在使用 MY_Controller 设置在这棵树上狂吠,只是不知道如何使用它。将考虑实施这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多