梦入琼楼寒有月,行过石树冻无烟

Laravel URL

在Laravel框架之中,为我们提供了丰富的url方法,分别可以实现访问、输出、返回、签名等效果的url,本文我们将会使用该方法进行一系列的url演示:

输出url


在Laravel之中,读者最为期待的是输出url信息的方法,使用Laravel框架,输出url方法只需要使用current即可:

web.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
use Illuminate\Support\Facades\View;

Route::get('/', function () {
return view('welcome');
});

Route::get('/url/{name}', function ($name) {
echo url()->current();
});

获取上一个请求的url


当然,除了获取url,Laravel还为我们提供了另一种用于获取上一个url的方法previous,我们可以通过使用该方法来获取用户上一个页面的url:

web.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
use Illuminate\Support\Facades\View;

Route::get('/', function () {
return view('welcome');
});

Route::get('/url/{name}', function ($name) {
echo url()->previous();
});

命名url路由


Laravel还为我们提供了一种命名url路由的方式,如果阅读过以往篇幅的读者可能会对此感到熟悉,就是命名路由,可以根据路由名称进行输出对应的信息:

web.php

1
2
3
4
Route::get('/url/{name}', function ($name) {
echo route('url.name',
['name' => $name]);
})->name('url.name');

设置默认值?


当然我们还可以为此设置一个默认值,也就就是说不管你的url是多少,都会输出这个默认值:

web.php
1
2
3
4
Route::get('/url/{name}', function () {
echo route('url.name',
['name' => 'hello']);
})->name('url.name');

URL 签名


在这里面的url签名指的是如果你访问的是localhost:8000/url/111,那么他会修改下url的相关数据如修改成:“http://localhost:8000/url/jiangxue?signature=7ec0cf1d32c6189a1a9b3be402f870427686e5528dd912ceb27e9bc89ed85417”,而生成的这个连接与你直接访问```localhost:8000/url/111```效果是相同的,这项技术也被运用在了邮箱发送与认证当中:

web.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
use Illuminate\Support\Facades\URL;

Route::get('/', function () {
return view('welcome');
});

Route::get('/url/{name}', function ($name) {
$url = Url::signedRoute('url.name', ['name' => 'jiangxue']);
echo $url;
})->name('url.name');

临时 URL


Laravel对url的支持还远不于以上所列举的方法,为了更好的应用在以上邮箱认证的场景下,Laravel还提供了一个临时的url生成方法temporaySignedRoute就是说他是会变的

web.php

1
2
3
4
5
6
Route::get('/url/{name}', function ($name) {
$url = Url::temporarySignedRoute('url.name', now()->addHour(), [
'name' => 'jiangxue'
]);
echo $url;
})->name('url.name');
⬅️ Go back