欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

laravel url 函数 有大用 有大大用

laravel 辅助函数url()和asset()区别

就我个人理解,二者基本没什么差别,但看网上说,url()主要用于生成一个完整的网址,asset()一般用于引入静态文件css,js,img等,

我查看源码发现,二者其实就有一个小差别,url()可以传递三个参数,asset只能传递两个参数,源码如下:

  1. function url($path = null, $parameters = [], $secure = null)
  2. {
  3. if (is_null($path)) {
  4. return app(UrlGenerator::class);
  5. }
  6. return app(UrlGenerator::class)->to($path, $parameters, $secure);
  7. }
  8. function asset($path, $secure = null)
  9. {
  10. return app('url')->asset($path, $secure);
  11. }

举例说明:

url('img/home1.png/'),生成的链接:http://localhost/img/home1.png/

url('img/home1.png/','test'),生成的链接:http://localhost/img/home1.png/test

url('img/home1.png/','test',true),生成的链接:https://localhost/img/home1.png/test

asset('img/home1.png/'),生成的链接:http://localhost/img/home1.png/

asset('img/home1.png/',true),生成的链接:https://localhost/img/home1.png/

来自 https://blog.csdn.net/king2wang/article/details/90369708


url 辅助函数

在 laravel 中有一个辅助函数 url()

它的作用是通过 path 就能生成网站对应的 url

遇到的问题

在我博客模板中,我想将一个连接通过 url 函数来生成对应的 url ,作为一个 a 链接

但是我的路由大概是这样 /articles/{id}/edit

通过追踪对应的源代码,我发现 url 函数的实现,是直接将 hostName 和 path 以及 “参数” 进行拼接


public function to($path, $extra = [], $secure = null)

{

    // First we will check if the URL is already a valid URL. If it is we will not

    // try to generate a new one but will simply return the URL as is, which is

    // convenient since developers do not always have to check if it's valid.

    if ($this->isValidUrl($path)) {

        return $path;

    }


    $scheme = $this->getScheme($secure);


    $extra = $this->formatParameters($extra);


    $tail = implode('/', array_map(

        'rawurlencode', (array) $extra)

    );


    // Once we have the scheme we will compile the "tail" by collapsing the values

    // into a single string delimited by slashes. This just makes it convenient

    // for passing the array of parameters to this URL as a list of segments.

    $root = $this->getRootUrl($scheme);


    if (($queryPosition = strpos($path, '?')) !== false) {

        $query = substr($path, $queryPosition);

        $path = substr($path, 0, $queryPosition);

    } else {

        $query = '';

    }


    return $this->trimUrl($root, $path, $tail).$query;

}

文件路径是 /vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php

在我看来,这里的 url() 函数应该实现不了这种 url 的获取吧

欢迎各位交流一下你们的实现 ^^

本作品采用《CC 协议》,转载必须注明作者和本文链接

 举报


suhanyujie

Laravel 7.x 译者 79 声望 

PHP开发工程师 @ 顶点有限公司

暂无个人描述~

 2 人点赞




《L02 从零构建论坛系统》

以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。


《L03 构架 API 服务器》

你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。

 推荐文章:

更多推荐...


博客

减少服务提供者的启动加速你服务的性能 2.0

 10 /  5 | 4天前


分享

(白嫖方法)有很多写代码的朋友都会遇到github打不开,特来分享一下方法。

 22 /  13 | 1个月前


分享

基于 Dcat Admin 的开源IT资产管理系统 Chemex 发布至 3.0.3 稳定版

 15 /  6 | 1个月前


博客

你知道Laravel 用到了哪些设计模式 ?都是如何用的

 23 /  3 | 1个月前


博客

PHP 数组的哈希碰撞攻击

 56 /  12 | 1个月前


博客

写一个简单的IoC容器案例,理解什么是依赖注入和控制反转

 41 /  6 | 1个月前

 讨论数量: 5

排序:

时间

投票


suhanyujie

Laravel 7.x 译者 79 声望 / PHP开发工程师 @ 顶点有限公司

@bing8u 额,可能你没注意到上面所写的需求,不是相对路径的问题:


我的路由大概是这样 /articles/{id}/edit


需要将 id 对应的参数替换进去,例如我还尝试这样做 url('articles/id/edit', ['id'=>47740]),希望最终运行的结果是 /articles/47740/edit

显然,没什么效果...


 3年前 评论

举报


TimJuly

235 声望 / 技术小组长 @ 阿里巴巴

框架用多了连 PHP 都不会了吧


sprintf('/articles/%d/edit', 1)

 3年前 评论

2

举报


suhanyujie

Laravel 7.x 译者 79 声望 / PHP开发工程师 @ 顶点有限公司

@TimJuly 哈。。。被框架局限了


 3年前 评论

举报


freyo

11 声望

route() 了解一下


 3年前 评论

举报


twisted-fate

L5.5 译者 166 声望

简单问题复杂化的典范


————————————————

原文作者:suhanyujie

转自链接:https://learnku.com/articles/10681/on-the-url-auxiliary-function-of-laravel

版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接。

来自 https://learnku.com/articles/10681/on-the-url-auxiliary-function-of-laravel


普通分类: