web的模板頁(yè)面里的url,如果路由做了改變,所有頁(yè)面都要手動(dòng)去修改嗎?
有沒(méi)有辦法路由做了改變,頁(yè)面上的相應(yīng)URL也隨之改變.
還有,有辦法讓用戶(hù)只能通過(guò)設(shè)置的路由規(guī)則訪(fǎng)問(wèn),無(wú)法原始路徑嗎?
更新webman-framework 到 1.0.10 或者后續(xù)更高版本。
composer require workerman/webman-framework ^1.0.10
路由定義時(shí)利用name()
方法給路由設(shè)置個(gè)名字。
例如config/route.php
:
Route::any('/blog/{id}', 'app\controller\Blog@read')->name('blog');
然后自己封裝個(gè)函數(shù)app\functions.php
。
function _url_($name, $parameters = [])
{
$route = Route::getByName($name);
if (!$route) {
return '';
}
return $route->url($parameters);
}
在模板里調(diào)用函數(shù)
_url_('blog', ['id' => 100]);
就可以得到實(shí)際的路由url了,結(jié)果為 /blog/100
。
如果不想讓訪(fǎng)問(wèn)原始路徑,就設(shè)置下對(duì)應(yīng)控制器的路由返回404,例如下面的是不允許訪(fǎng)問(wèn)blog控制器。
Route::any('/blog[/{action}]', function () {return response('404 Not Found', 404);});
是這樣的, 應(yīng)用劃分了 home 和admin 兩個(gè)應(yīng)用. 路由里寫(xiě)的是:
//home
Route::any('/', 'app\home\controller\Index@index');
Route::any('/login', 'app\home\controller\User@login');
//admin
Route::any('admin/','app\admin\controller\Index@index');
Route::any('admin/login','app\admin\controller\Index@login');
然后在訪(fǎng)問(wèn)的時(shí)候, home的訪(fǎng)問(wèn)都正常. admin的 只有 admin/是OK的, admin/login 訪(fǎng)問(wèn)是 404.
不是bug,是你寫(xiě)錯(cuò)了,應(yīng)該是
Route::any('/admin','app\admin\controller\Index@index');
Route::any('/admin/login','app\admin\controller\Index@login');
admin前面要有/