资讯专栏INFORMATION COLUMN

Laravel重写资源路由自定义URL

vslam / 2561人阅读

摘要:重写方法创建新类,代码如下在中注册这个类重写资源路由最后使用生成的路由就满足需求了。

重写原因

近期在使用Laravel开发项目过程中,为了简化路由代码使用了Laravel的资源路由,Route::resource("photo", "PhotoController");
在默认情况下,Laravel生成的路由表如下:

动作 路径 Action 路由名称
GET /photo index photo.index
GET /photo/create create photo.create
POST /photo store photo.store
GET /photo/{photo} show photo.show
GET /photo/{photo}/edit edit photo.edit
PUT/PATCH /photo/{photo} update photo.update
DELETE /photo/{photo} destroy photo.destroy

为了满足项目需求,需将/photo/{photo}/edit 路径改为 /photo/edit/{photo}

实现步骤

查询了Laravel源码,发现此路径生成的方法在IlluminateRoutingResourceRegistrar.php类中,我们需重写此类的addResourceEdit方法即可。

重写addResourceEdit方法
创建新类 AppRoutingResourceRegistrar.php,代码如下:

namespace AppRouting;

use IlluminateRoutingResourceRegistrar as OriginalRegistrar;
class ResourceRegistrar extends OriginalRegistrar
{
    /**
     * Add the edit method for a resourceful route.
     *
     * @param  string  $name
     * @param  string  $base
     * @param  string  $controller
     * @param  array   $options
     * @return IlluminateRoutingRoute
     */
    protected function addResourceEdit($name, $base, $controller, $options)
    {
        $uri = $this->getResourceUri($name)."/".static::$verbs["edit"]."/{".$base."}";

        $action = $this->getResourceAction($name, $controller, "edit", $options);

        return $this->router->get($uri, $action);
    }
}

在AppServiceProvider中注册这个类

public function boot()
    {
        //重写资源路由
        $registrar = new AppRoutingResourceRegistrar($this->app["router"]);
        $this->app->bind("IlluminateRoutingResourceRegistrar", function () use ($registrar) {
            return $registrar;
        });
    }

最后使用Route::resource("photo", "PhotoController");生成的路由就满足需求了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25681.html

相关文章

  • Laravel思维导图之Laravel HTTP路由、中间件、控制器

    摘要:又限于层的内容太多,我在这篇中将整理路由中间件控制器部分内容。前者定义页面路由,默认应用中间件组后者定义无状态路由,会应用中间件组。命名路由可以为指定路由或者控制器方法命名,也可以为已命名的路由生成。 showImg(https://segmentfault.com/img/remote/1460000010882838); 上图列出了 Laravel HTTP 层的相关知识大纲。由于...

    linkin 评论0 收藏0
  • Laravel思维导图之HTTP请求、响应、表单验证

    摘要:今天我来分享中层关于请求响应与表单验证的知识。手动创建验证请求之前的内容是直接使用的方法来实现表单验证。下一步到这篇为止,我完成了入门指南核心概念层的路由中间件控制器请求响应表单验证的学习和整理。 showImg(https://segmentfault.com/img/remote/1460000010882838); 今天我来分享 Laravel 中 HTTP 层关于请求、响应与表...

    lewif 评论0 收藏0
  • Laravel Socialite 详解

    摘要:这样,让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容。 不久之前 Dearmadman 曾写过一篇 使用 Laravel Socialite 集成微信登录 的文章,但是似乎还是有些同学不太明白,询问着如何集成 QQ 登录,那么,本篇我们就来剖析一下 Laravel Socialite 的详细内容。让各位同学都获得 Laravel Socialite 所...

    yuanxin 评论0 收藏0
  • PHP_Laravel

    摘要:简介是一套简介,优雅开发框架,通过简单,高雅,表达式语法开发应用。服务器需要有该目录及所有子目录的写入权限可用于存储应用程序所需的一些文件该目录下包括缓存和编译后的视图文件日志目录测试目录该目录下包含源代码和第三方依赖包环境配置文件。 简介 Laravel是一套简介,优雅PHP Web开发框架(PHP Web Framework), 通过简单,高雅,表达式语法开发Web应用。 特点: ...

    NoraXie 评论0 收藏0
  • LaravelLaravel 框架关键技术解析·读书笔记(二)

    摘要:框架关键技术解析读书笔记二第五章框架应用程序根目录版本默认的框架应用程序是符合规范的,所以相应的目录结构也是基本固定的,不同的目录加载了功能文件,如果添加了新的目录,需要在文件中添加规范的自动加载部分并执行命令。 Laravel 框架关键技术解析·读书笔记(二) 第五章 框架应用程序根目录(5.1版本) 默认的Laravel框架应用程序是符合PSR规范的,所以相应的目录结构也是基本...

    TIGERB 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<