资讯专栏INFORMATION COLUMN

在Eloquent中封装URL属性来统一管理视图中的路由

Kerr1Gan / 2666人阅读

摘要:在中封装属性来统一管理视图中的路由在应用程序中拥有数十个甚至数百个视图并不罕见。很快就会对视图中使用的路由管理失控。可以想象如果你在视图中做了多少这样的事情。这样做的好处在于,你修改视图中的任何路由,只需编辑两个文件,而不是数百个。

在Eloquent中封装URL属性来统一管理视图中的路由

在 Laravel 应用程序中拥有数十个甚至数百个视图并不罕见。很快就会对视图中使用的路由管理失控。可以想象如果你在视图中做了多少这样的事情。

 $user->id]) }}">{{ $user->name }}

如果想对路由名称或者默认查询参数值进行修改,就需要在整个应用中进行大量的字符串替换操作,但是这会带来重复性的工作量,同时也可能会漏掉一些地方。

那我们可以做些什么来更好的处理这个问题呢?下面有两种实现方式。

第一种: 修改Eloquent
// app/Models/User.php


然后在视图中就可以这样使用

{{ $user->name }}

感觉写的很干净,是吧?但对于高级开发人员,你可能希望采用下一种方法。

第二种. 在Eloquent中使用URL Presenter

咋一看你可能会觉的比较眼熟,是的,这里我们定义一个url属性,但与一般写法不同的是是我们会返回一个 presenter 实例。

// app/Models/User.php


// app/Presenters/User/UrlPresenter.php

user = $user;
    }

    public function __get($key)
    {
        if(method_exists($this, $key))
        {
            return $this->$key();
        }

        return $this->$key;
    }

    public function delete()
    {
        return route("users.delete", $this->user);
    }

    public function edit()
    {
        return route("users.edit", $this->user);
    }

    public function show()
    {
        return route("users.show", $this->user);
    }

    public function update()
    {
        return route("users.update", $this->user);
    }
}

然后就可以这样使用

{{ $user->name }}

如上,现在的视图并不关心我们如何确定URL,只是返回一个URL即可。 这样做的好处在于,你修改视图中的任何路由,只需编辑两个文件,而不是数百个。

关于更多PHP的使用,请前往 PHPCasts社区

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

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

相关文章

  • laravel5.5手写教程3的基于资源路由的CURD操作(适合初学者)

    摘要:新增一篇新闻新增失败输入不符合要求请输入标题请输入内容新增文章上面代码中的是为了防攻击的,每个表单都必须存在。 本文我将结合简单例子,完成laravel框架下的增删改查,希望会对大家有所帮助。在进行之前,大家应该保证自己的数据库链接无误,artisan命令能正常使用,路由链接无问题。 一、创建控制器、路由避免影响其他路由,我们先注释掉之前联系时编写的所有路由。因为上一章我们已经学会建立...

    olle 评论0 收藏0
  • laravel入门

    摘要:开发根目录测试分为单元测试和功能测试创建一个文件执行测试测试前清除配置缓存运行单个测试用例小提示在开发与进行交互的第三方扩展包时,最好选择注入契约而不使用。 参考https://laravelacademy.org/ 概念 单词 契约Contract 就是接口 repository 仓库(封装数据访问,可以搜索:repository模式) Container 容器 ServicePr...

    韩冰 评论0 收藏0
  • Laravel 5系列教程五:MVC的基本流程

    摘要:原文来自免费视频教程地址期间受到很多私事影响,终于还是要好好写写的教程了。我们来实现这个功能显示文章详情通过文章展示来快速体验上面的流程注册路由来到中,我们增加一个路由上面的路由指定我们需要加载中的方法。 原文来自: https://jellybool.com/post/programming-with-laravel-5-model-controller-view-basic-wor...

    mrcode 评论0 收藏0
  • Angular(01)-- 架构概览

    摘要:正文架构概览正文架构概览接触大概一个月吧,期间写了个项目,趁现在稍微有点时间,来回顾梳理一下。里的模块,并不等同于项目中的模块概念。当然,这只是我目前阶段的理解。声明 本系列文章内容梳理自以下来源: Angular 官方中文版教程 官方的教程,其实已经很详细且易懂,这里再次梳理的目的在于复习和巩固相关知识点,刚开始接触学习 Angular 的还是建议以官网为主。 因为这系列文章,更多的会...

    bitkylin 评论0 收藏0
  • VUE知识点集锦

    摘要:载入前后在阶段,实例的和都初始化了,但还是挂载之前为虚拟的节点,还未替换。类似于,不同在于提交的是,而不是直接变更状态可以包含任意异步操作。 vue基础 1、 router 路由与 a 标签的区别:https://www.jianshu.com/p/34b...2、 VUE双向绑定的原理: 答:VUE实现双向数据绑定的原理就是利用了 Object.defineProperty() 这个...

    Tecode 评论0 收藏0

发表评论

0条评论

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