web的模板页面里的url,如果路由做了改变,所有页面都要手动去修改吗? 有没有办法路由做了改变,页面上的相应URL也随之改变.
还有,有办法让用户只能通过设置的路由规则访问,无法原始路径吗?
更新webman-framework 到 1.0.10 或者后续更高版本。 composer require workerman/webman-framework ^1.0.10 路由定义时利用name()方法给路由设置个名字。 例如config/route.php:
composer require workerman/webman-framework ^1.0.10
name()
config/route.php
Route::any('/blog/{id}', 'app\controller\Blog@read')->name('blog');
然后自己封装个函数app\functions.php。
app\functions.php
function _url_($name, $parameters = []) { $route = Route::getByName($name); if (!$route) { return ''; } return $route->url($parameters); }
在模板里调用函数
_url_('blog', ['id' => 100]);
就可以得到实际的路由url了,结果为 /blog/100。
/blog/100
如果不想让访问原始路径,就设置下对应控制器的路由返回404,例如下面的是不允许访问blog控制器。
Route::any('/blog[/{action}]', function () {return response('404 Not Found', 404);});
真迅速, 昨晚我看还是1.0.09呢.. 另外好像多应用路由有个BUG, 稍等.我给你贴一下.
是这样的, 应用划分了 home 和admin 两个应用. 路由里写的是: //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');
然后在访问的时候, home的访问都正常. admin的 只有 admin/是OK的, admin/login 访问是 404.
不使用定义的路由访问就是OK的, 麻烦你测试下看看.
不是bug,是你写错了,应该是 Route::any('/admin','app\admin\controller\Index@index'); Route::any('/admin/login','app\admin\controller\Index@login');
admin前面要有/
@1:谢谢,确实是我写错了..
更新webman-framework 到 1.0.10 或者后续更高版本。
composer require workerman/webman-framework ^1.0.10
路由定义时利用
name()
方法给路由设置个名字。例如
config/route.php
:然后自己封装个函数
app\functions.php
。在模板里调用函数
就可以得到实际的路由url了,结果为
/blog/100
。如果不想让访问原始路径,就设置下对应控制器的路由返回404,例如下面的是不允许访问blog控制器。
真迅速, 昨晚我看还是1.0.09呢.. 另外好像多应用路由有个BUG, 稍等.我给你贴一下.
是这样的, 应用划分了 home 和admin 两个应用. 路由里写的是:
//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');
然后在访问的时候, home的访问都正常. admin的 只有 admin/是OK的, admin/login 访问是 404.
不使用定义的路由访问就是OK的, 麻烦你测试下看看.
不是bug,是你写错了,应该是
Route::any('/admin','app\admin\controller\Index@index');
Route::any('/admin/login','app\admin\controller\Index@login');
admin前面要有/
@1:谢谢,确实是我写错了..