Laravel 如何避免 route() 因别名不存在而报错的问题

原创 Laravel
阅读数: 850 2018年12月12日

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


phpriji.cn | 网站地图 | 沪ICP备17015433号-1