laravel 辅助函数url()和asset()区别
就我个人理解,二者基本没什么差别,但看网上说,url()主要用于生成一个完整的网址,asset()一般用于引入静态文件css,js,img等,
我查看源码发现,二者其实就有一个小差别,url()可以传递三个参数,asset只能传递两个参数,源码如下:
- function url($path = null, $parameters = [], $secure = null)
- {
- if (is_null($path)) {
- return app(UrlGenerator::class);
- }
- return app(UrlGenerator::class)->to($path, $parameters, $secure);
- }
- function asset($path, $secure = null)
- {
- return app('url')->asset($path, $secure);
- }
举例说明:
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