Kohana 针对特定 url 的不止一种动态路由
Kohana more than one dynamic routing for specific urls
不知道有没有人在用kohana(koseven,新名字)框架进行开发。我需要有关路由的帮助。我正在使用 koseven (kohana) 框架将 asp 站点迁移到 php,我必须保留当前站点上的所有 url 路由。因此,我必须在我的项目中使用多个路由。
Url 结构体必须是这样的:
domain.com/contenttype/contentid -> contenttype 是动态的并且通过 Content Controller 获取数据
domain.com/profile/username ->profile 是控制器,index 是动作。我必须从 id 参数中获取用户名。
domain.com/categories/categorname(工作正常-> categories 是控制器,index 是 action,categorname 是 id 参数。
我的网站上有一个管理页面,并在上面使用了目录路由。
这是我在 bootstrap.php 文件上的路线:
Route::set('panel', '<directory>(/<controller>(/<action>(/<id>)))', array('directory' => 'panel'))
->defaults(array(
'controller' => 'panel',
'action' => 'index',
));
Route::set('kategori','<kategori>(/<id>)', array('id'=>'.*'))
->defaults([
'controller'=>'kategori',
'action'=>'index',
]);
Route::set('default', '(<controller>(/<action>(/<id>)))', array('id'=>'.*'))
->defaults([
'controller' => 'anasayfa',
'action' => 'index',
]);
第一个问题:如果我为配置文件复制分类路由,它会使用分类路由而不是配置文件。
第二个问题:如何获得内容类型的动态路由。内容控制器是默认控制器,如果在 id 参数上没有给出任何内容标题,它将在动态内容类型下列出内容。如果此时识别到id参数,则会显示内容的详细信息。
谢谢。
Route::set('panel', 'panel(/<controller>(/<action>(/<id>)))', ['controller' => '\w+', 'action' => '\w+', 'id' => '[-\w]+'])
->defaults(array(
'directory' => 'panel',
'controller' => 'dashboard',
'action' => 'index',
'id' => null,
));
Route::set('kategori','<kategori>(/<id>)', ['kategori' => '[-\w]+', 'id' => '[-\w]+'])
->defaults([
'controller' => 'kategori',
'action' => 'index',
'id' => null,
])
->filter(function ($route, $params, $request) {
$model = ORM::factory('Kategori', ['kategori' => $params['kategori'], 'id' => $params['id']]);
if ($model->loaded()) {
$params['model'] = $model;
return $params;
}
return false;
});
Route::set('default', '(<controller>(/<action>(/<id>)))', ['controller' => '\w+', 'action' => '\w+', 'id' => '[-\w]+'])
->defaults([
'controller' => 'anasayfa',
'action' => 'index',
'id' => null,
]);
不知道有没有人在用kohana(koseven,新名字)框架进行开发。我需要有关路由的帮助。我正在使用 koseven (kohana) 框架将 asp 站点迁移到 php,我必须保留当前站点上的所有 url 路由。因此,我必须在我的项目中使用多个路由。
Url 结构体必须是这样的:
domain.com/contenttype/contentid -> contenttype 是动态的并且通过 Content Controller 获取数据 domain.com/profile/username ->profile 是控制器,index 是动作。我必须从 id 参数中获取用户名。 domain.com/categories/categorname(工作正常-> categories 是控制器,index 是 action,categorname 是 id 参数。
我的网站上有一个管理页面,并在上面使用了目录路由。
这是我在 bootstrap.php 文件上的路线:
Route::set('panel', '<directory>(/<controller>(/<action>(/<id>)))', array('directory' => 'panel'))
->defaults(array(
'controller' => 'panel',
'action' => 'index',
));
Route::set('kategori','<kategori>(/<id>)', array('id'=>'.*'))
->defaults([
'controller'=>'kategori',
'action'=>'index',
]);
Route::set('default', '(<controller>(/<action>(/<id>)))', array('id'=>'.*'))
->defaults([
'controller' => 'anasayfa',
'action' => 'index',
]);
第一个问题:如果我为配置文件复制分类路由,它会使用分类路由而不是配置文件。 第二个问题:如何获得内容类型的动态路由。内容控制器是默认控制器,如果在 id 参数上没有给出任何内容标题,它将在动态内容类型下列出内容。如果此时识别到id参数,则会显示内容的详细信息。
谢谢。
Route::set('panel', 'panel(/<controller>(/<action>(/<id>)))', ['controller' => '\w+', 'action' => '\w+', 'id' => '[-\w]+'])
->defaults(array(
'directory' => 'panel',
'controller' => 'dashboard',
'action' => 'index',
'id' => null,
));
Route::set('kategori','<kategori>(/<id>)', ['kategori' => '[-\w]+', 'id' => '[-\w]+'])
->defaults([
'controller' => 'kategori',
'action' => 'index',
'id' => null,
])
->filter(function ($route, $params, $request) {
$model = ORM::factory('Kategori', ['kategori' => $params['kategori'], 'id' => $params['id']]);
if ($model->loaded()) {
$params['model'] = $model;
return $params;
}
return false;
});
Route::set('default', '(<controller>(/<action>(/<id>)))', ['controller' => '\w+', 'action' => '\w+', 'id' => '[-\w]+'])
->defaults([
'controller' => 'anasayfa',
'action' => 'index',
'id' => null,
]);