webman的URL问题

mlyykk

web的模板页面里的url,如果路由做了改变,所有页面都要手动去修改吗?
有没有办法路由做了改变,页面上的相应URL也随之改变.

还有,有办法让用户只能通过设置的路由规则访问,无法原始路径吗?

2430 1 1
1个回答

walkor

更新webman-framework 到 1.0.10 或者后续更高版本。
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

function _url_($name, $parameters = [])
{
    $route = Route::getByName($name);
    if (!$route) {
        return '';
    }
    return $route->url($parameters);
}

在模板里调用函数

_url_('blog', ['id' => 100]);

就可以得到实际的路由url了,结果为 /blog/100

如果不想让访问原始路径,就设置下对应控制器的路由返回404,例如下面的是不允许访问blog控制器。

Route::any('/blog[/{action}]', function () {return response('404 Not Found', 404);});
  • mlyykk 2020-12-07

    真迅速, 昨晚我看还是1.0.09呢.. 另外好像多应用路由有个BUG, 稍等.我给你贴一下.

  • mlyykk 2020-12-07

    是这样的, 应用划分了 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.

  • mlyykk 2020-12-07

    不使用定义的路由访问就是OK的, 麻烦你测试下看看.

  • walkor 2020-12-07

    不是bug,是你写错了,应该是
    Route::any('/admin','app\admin\controller\Index@index');
    Route::any('/admin/login','app\admin\controller\Index@login');

    admin前面要有/

  • mlyykk 2020-12-07

    @1:谢谢,确实是我写错了..

年代过于久远,无法发表回答
🔝