在使用 laravel 搭建后台的时候,使用路由别名来保存/识别菜单。
所以碰到一个问题,在后台添加菜单后,会在页面上显示出来,此时路由还未配置好,页面就会报错:Route [admin.market.adsAccount.index] not defined
要想终止抛出异常,先找到异常在哪里抛出的。
最终找到:vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php 304 行抛出的 InvalidArgumentException("Route [{$name}] not defined.");
route() 调用的就是这里。
这个文件是框架文件,不想改动。
route() 也是框架自带,也不想改动。
那就新建一个 routeSafe() 来捕捉异常就可以了。
代码实现:
自动一个全局方法,并加载,在这里面写入:
if(!function_exists('routeSafe')){
/**
* 安全路由函数,如果路由别名未设置,不会抛出异常
* @param $name
* @param array $parameters
* @param bool $absolute
* @return string
*/
function routeSafe($name, $parameters = [], $absolute = true){
try{
return route($name, $parameters, $absolute);
}catch (InvalidArgumentException $e){
return 'javascript:alert("路由别名未配置");';
}
}
}然后在管理后台的菜单路由解析的时候,使用 routeSafe() 替换 route() 就不会报错了,如果路由别名未配置,点击的时候,也只是页面弹出一个 alert() ,也不会报错了。