在我的网站上,我有
的常用路线website.com
website.com/pages/about
website.com/img/116633
...
现在我有这些页面
website.com/username/mike
website.com/username/john
website.com/username/eric
...
应该成为
website.com/mike
website.com/john
website.com/eric
...
我的路由是这样的:
$routes->connect(
'/*',
['controller' => 'username', 'action' => 'index'],
['routeClass' => 'DashedRoute']
);
这可行,但所有其他页面如
website.com/pages/about
website.com/img/116633
已被破坏(他们使用'控制器' =>'用户名')
实现这一目标的最佳方法是什么?
在我的完整路线下面.php
Router::defaultRouteClass('Route');
Router::extensions(['html', 'rss', 'pdf']);
Router::scope('/', function ($routes) {
$routes->connect('/', ['controller' => 'Search', 'action' => 'start']);
$routes->connect('/start', ['controller' => 'Search', 'action' => 'start']);
$routes->connect(
'/*',
['controller' => 'username', 'action' => 'index'],
['routeClass' => 'DashedRoute']
);
$routes->fallbacks('InflectedRoute');
});
Router::connect('/img/*', ['controller' => 'Pic', 'action' => 'item']);
Router::url([
'controller' => 'Pages',
'action' => 'lang',
'_base' => 'false'
]);
Router::addUrlFilter(function ($params, $request) {
if (isset($request->params['lang']) && !isset($params['lang'])) {
$params['lang'] = $request->params['lang'];
}
return $params;
});
Plugin::routes();
答案 0 :(得分:1)
$routes->connect(
'/*',
['controller' => 'username', 'action' => 'index'],
['routeClass' => 'DashedRoute']
);
必须替换为:
$routes->connect(
'/:username',
['controller' => 'Username', 'action' => 'index'],
[
'pass' => ['username'],
'username' => '[0-9a-zA-Z]+'
]
);
这会将网址中的用户名传递给index()
控制器中的Username
。
有关详情,请访问:Route Elements和Passing parameters to Action。