摘要:我们知道,在中使用的话,只需要绑定模型,在创建表单,链接时,直接可以拿来用,不需要多带带的去给路由别名如创建链接但是我们使用时,在创建链接,尝试用以上方法访问时,就会报错如创建链接抛出路由不存在的错误那我们如何像使用一样方便的来使用呢很简单,
我们知道,在 laravel 中使用 resource 的话,只需要绑定模型,在创建表单,链接时,直接可以拿来用,不需要多带带的去给路由 as 别名
如
Route::resource("main","MainController"); // 创建链接 URL::route("main.index")
但是我们使用 Route::controller 时,在创建链接,尝试用以上方法访问时,就会报错
如
Route::controller("main","MainController"); // 创建链接 URL::route("main.index") // 抛出路由不存在的错误
那我们如何像使用 resource 一样方便的来使用 controller 呢?
很简单,我们打开 controller 的源码一看就知道了
// 源码路径:vendor/laravel/framework/src/Illuminate/Routing/Router.php :257 行 看到如下方法 /** * Route a controller to a URI with wildcard routing. * * @param string $uri * @param string $controller * @param array $names * @return void */ public function controller($uri, $controller, $names = array()) { $prepended = $controller; // First, we will check to see if a controller prefix has been registered in // the route group. If it has, we will need to prefix it before trying to // reflect into the class instance and pull out the method for routing. if ( ! empty($this->groupStack)) { $prepended = $this->prependGroupUses($controller); } $routable = $this->getInspector()->getRoutable($prepended, $uri); // When a controller is routed using this method, we use Reflection to parse // out all of the routable methods for the controller, then register each // route explicitly for the developers, so reverse routing is possible. foreach ($routable as $method => $routes) { foreach ($routes as $route) { $this->registerInspected($route, $controller, $method, $names); } } $this->addFallthroughRoute($controller, $uri); } // 我们看到可以传递第三个参数,是一个数组,那么数组的内容是什么呢?此方法里面没有处理 name,我们注意看这一行 $this->registerInspected($route, $controller, $method, $names); //好了,我们找到 registerInspected 这个方法,看他如何处理 name protected function registerInspected($route, $controller, $method, &$names) { $action = array("uses" => $controller."@".$method); // If a given controller method has been named, we will assign the name to the // controller action array, which provides for a short-cut to method naming // so you don"t have to define an individual route for these controllers. $action["as"] = array_get($names, $method); $this->{$route["verb"]}($route["uri"], $action); }
我们看到他以 . 去切割了 name ,然后加入了进去,这样我们就清楚很多啦
路由这样写
Route::controller( "options", "OptionsController", [ "getSite"=>"options.site" ] ); // 现在就可以使用创建链接啦 URL::route("options.site")
这些东西找了下 laravel 文档没找着,所以自己直接看的源码
本文发布源在:laravel Route::controller 使用路由命名
欢迎大家加入 laravel 交流群一起讨论:365969825
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/20924.html
摘要:入口启动后,会先加载服务提供者中间件等组件,在查找路由之前因为我们使用的是门面,所以先要查到的实体类。注册第一步当然还是通过服务提供者,因为这是启动的关键,在内加载路由文件。因路由文件中没有命名空间。 showImg(https://segmentfault.com/img/bVbhjvY?w=600&h=296); 前言 我的解析文章并非深层次多领域的解析攻略。但是参考着开发文档看此...
摘要:简介是一套简介,优雅开发框架,通过简单,高雅,表达式语法开发应用。服务器需要有该目录及所有子目录的写入权限可用于存储应用程序所需的一些文件该目录下包括缓存和编译后的视图文件日志目录测试目录该目录下包含源代码和第三方依赖包环境配置文件。 简介 Laravel是一套简介,优雅PHP Web开发框架(PHP Web Framework), 通过简单,高雅,表达式语法开发Web应用。 特点: ...
摘要:是用户自定义函数中支持可变数量的参数列表。在及更早版本中,使用函数,,和。可变数量的参数列表,这个概念可能你会觉得很抽象。我们再看一个示例以上例程会输出可变数量参数将被传递到中,给定的数组会作为参数变量。 最近在读 Laravel 源码的时候,发现了一个段特别有趣的代码,大家请看: showImg(https://segmentfault.com/img/remote/14600000...
摘要:下面是刚才说的这些步骤对应的核心代码收集路由和控制器里应用的中间件我们在前面的文章里已经详细的解释过中间件和路由的原理了,接下来就看看当请求最终找到了路由对应的控制器方法后是如何为控制器方法注入正确的参数并调用控制器方法的。 控制器 控制器能够将相关的请求处理逻辑组成一个单独的类, 通过前面的路由和中间件两个章节我们多次强调Laravel应用的请求在进入应用后首现会通过Http Ker...
摘要:本文主要学习总结下间参数传递。开发时经常碰到类似场景有时需要在中读取中设置的和,有时也需要在中读取中设置的参数。总结下这几个知识点,便于查阅。 本文主要学习总结下Route,Middleware,Controller间参数传递。开发时经常碰到类似场景:有时需要在Middleware中读取Route中设置的middleware parameter和route parameter,有时也需...
阅读 3777·2021-11-17 09:33
阅读 3271·2021-10-08 10:05
阅读 3092·2021-09-22 15:36
阅读 1065·2021-09-06 15:02
阅读 2757·2019-08-29 12:45
阅读 1572·2019-08-26 13:40
阅读 3382·2019-08-26 13:37
阅读 399·2019-08-26 13:37