Laravel 文档阅读:生成 URL
简介
Laravel 提供了几个生成 URL 地址的辅助函数,包括:url
、route
和 action
。它们的主要作用是:在 Blade 模板中构建链接、构建 API 响应或者构建重定向到应用程序其他部分的响应。
基础
生成基础 URLs
url
辅助函数是生成 URL 的最基础方法。生成的 URL 会自动添加 Scheme(HTTP 或者 HTTPS)和主机地址,这些信息都是从当前请求里获得的:
$post = App\Post::find(1);
echo url("/posts/{$post->id}");
// http://example.com/posts/1
获得当前 URL
如果使用 url
函数时,没有提供参数,那么 url()
会返回一个 Illuminate\Routing\UrlGenerator
实例,从中可以获得当前 URL 相关的信息:
// Get the current URL without the query string...
echo url()->current();
// Get the current URL including the query string...
echo url()->full();
// Get the full URL for the previous request...
echo url()->previous();
这些方法就还可以通过 URL
门面访问到:
use Illuminate\Support\Facades\URL;
echo URL::current();
命名路由 URLs
route
辅助函数可以用来生成到指定命名路由的 URL。使用命名路径生成 URL 的方式不与路由的实际 URL 耦合。所以,如果路由 URL 改变后,使用 route
函数调用的地方不需要任何修改。例如,应用程序里定义了这么一个路由:
Route::get('/posts/{post}', function () {
//
})->name('posts.show');
下面,我们使用 route
函数生成到该命名路由的 URL:
echo route('posts.show', ['post' => 1]);
// http://example.com/posts/1
如果你经常在生成 URL 的时候,使用 Eloquent Model 的主键。这样的话,你可以直接把 Eloquent Model 作为参数值传递给 route
函数,route
函数会自动解析出 Model 的主键值。
echo route('posts.show', ['post' => $post]);
控制器 Action URLs
action
方法通过指定控制器 action 来生成访问的 URL。你无需传递具有完整命名空间的控制类名,只要传递相对于 App\Http\Controllers
这个命名空间后面的部分即可:
$url = action('HomeController@index');
如果控制器方法接受路由参数,你可以通过第二个参数传递过去:
$url = action('UserController@profile', ['id' => 1]);
默认值
对于某些应用程序,你可能希望为某些 URL 参数指定请求范围级别的默认值。假设在你的许多路由中,包含一个 {locale}
参数。
Route::get('/{locale}/posts', function () {
//
})->name('posts.index');
每次调用 route
函数的时候,都要传递这个 locale
参数会很麻烦。对于这种情况呢,你可以使用 URL::defaults
方法为这个参数指定默认值,它会在当前请求里总是生效。为了方便,你也可以创建一个中间件,在中间件中调用这个方法,然后让相关路由/路由组使用这个中间件。
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\URL;
class SetDefaultLocaleForUrls
{
public function handle($request, Closure $next)
{
URL::defaults(['locale' => $request->user()->locale]);
return $next($request);
}
}
locale
参数的默认值设定好后,通过 route
辅助函数生成 URL 的时候,就无需为 locale
传递值了。
本作品采用《CC 协议》,转载必须注明作者和本文链接