两段uri的难度

时间:2014-10-18 20:03:44

标签: codeigniter uri

他们正在尝试创建网址,其中第一个网段是用户,第二个网站是他的文件,例如:www.exemplo.com/joao/ball

控制器

public function user() {

   $user_url = $this->uri->segment(1);

}

^^这将返回每个文件的配置文件:www.exemplo.com/joao

public function arquivo() {

   $arquivo_url = $this->uri->segment(2);

}

^^此特定文件:www.exemplo.com/joao/bola

路线

$route['(:any)'] = 'home/user/$1';
$route['??'] = 'home/arquivo/$1';

3 个答案:

答案 0 :(得分:0)

要解决您的问题,您应该使用这样的路线..

$route['(:any)/(:any)'] = 'home/arquivo';
$route['(:any)'] = 'home/user';

但是就你的项目而言,这种类型的路由将给你带来一些困难。我建议你使用显式路由名称,因为(:any)引用任何东西都可以通过这个URL。

答案 1 :(得分:0)

您可以使用routes将URI及其参数映射到相关功能。 CodeIgniter路由的行为有所不同,具体取决于CI的版本。

在CodeIgniter 2.2.0中(:any)equivalent to the regex, .+ - 匹配任何一个或多个字符(不包括换行符);在3.0和当前开发版本中它是equivalent to [^/]+ - 一个或多个任何字符,不包括换行符。

后者在这种情况下更有用,因为您要识别两个参数(由正斜杠分隔)。

在2.2.0中:

$route['([^/]+)/([^/]+)'] = 'home/arquivo/$1/$2';
$route['(:any)'] = 'home/user/$1';

在3.0中:

$route['(:any)/(:any)'] = 'home/arquivo/$1/$2';
$route['(:any)'] = 'home/user/$1';

控制器函数通常会将URI参数作为函数参数传递,如下所示:

public function user($user)
{
    // Show the user's profile
}

public function arquivo($user, $file)
{
    // Show the file for the user
}

答案 2 :(得分:0)

能够使用以下代码解决。

$route['([^/]+)'] = 'home/user/$1';
$route['(:any)/(:any)'] = 'home/arquivo/$1';