在使用 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() ,也不会报错了。