_remap或URI路由在笨(_remap or URI Routing in codeignite

2019-10-17 04:02发布

我目前正在研究的PHP框架笨和理解的主要概念,到目前为止,直到大约_remapping的控制器部分。 我有一个认识_remapping如何覆盖的控制器方法通过URI例如,从www.example.com/about_me到www.example.com/about-me行为。 我想听到的是人民的意见就如何使用 - _remapping方法或URI路由的方法? 我只是提出这个研究这些方法,有人一直困扰重映射功能时一样,他们已指示使用URI路由。

所以..

1)什么是使用主常用的方法和亲的比其他一个? 2)它是最好使用URI路由的PHP5 CI 2版本起?

我将不胜感激听到你的意见!

Answer 1:

假设你不想使用index (即http://www.yourdomain.com/category你的)动作Categories控制器,可以使用航线。

$route['category/(:any)'] = 'category/view/$1';

然后你只需要你的类别控制器内的View操作接收类别名称,即PHP。

http://www.yourdomain.com/category/PHP

function View($Tag)
{
    var_dump($Tag);
}

如果你仍然想你的控制器内访问您的索引操作,您仍然可以通过访问http://www.yourdomain.com/category/index



Answer 2:

如果要更改默认的CI的路由的行为,您应该使用_remap。

例如,如果您设置了维修,并希望禁止投放任何特定的控制器,你可以使用一个_remap()函数加载你的看法,并且将不能调用其他方法。

另一个例子是,当你在你的URI多种方法。 例:

site.com/category/PHP
site.com/category/Javascript
site.com/category/ActionScript

你的控制器category ,但方法是无限的。 在那里,你可以使用一个_remap方法,由科林·威廉姆斯这里所说的: http://codeigniter.com/forums/viewthread/135187/

 function _remap($method)
{
  $param_offset = 2;

  // Default to index
  if ( ! method_exists($this, $method))
  {
    // We need one more param
    $param_offset = 1;
    $method = 'index';
  }

  // Since all we get is $method, load up everything else in the URI
  $params = array_slice($this->uri->rsegment_array(), $param_offset);

  // Call the determined method with all params
  call_user_func_array(array($this, $method), $params);
}  

综上所述,如果当前CI的路由适合于您的项目,不要使用_remap()方法。



Answer 3:

$default_controller = "Home";

$language_alias = array('gr','fr');

$controller_exceptions = array('signup');

$route['default_controller'] = $default_controller;

$route["^(".implode('|', $language_alias).")/(".implode('|', $controller_exceptions).")(.*)"] = '$2';

$route["^(".implode('|', $language_alias).")?/(.*)"] = $default_controller.'/$2';

$route["^((?!\b".implode('\b|\b', $controller_exceptions)."\b).*)$"] = $default_controller.'/$1';

foreach($language_alias as $language)

$route[$language] = $default_controller.'/index';


文章来源: _remap or URI Routing in codeigniter