[Day22]Laravel 路由

Laravel 路由

基本路由

首先看到rotues资料夹里的web.php,会看到这些程序码

Route::get('/', function () { // 使用get方法请求
    return view('welcome'); // 回传view给他
});

view的位置就放在resources\views\welcome.blade.php

接下来说说来说说基本路由
Laravel 的路由只接受一个 URI 和一个Closure(闭包)

Route::get('foo', function () {
    return 'Hello World';
});

laravel 可以使用所有HTTP的方法

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

可能你这个路由可以响应多个HTTP的请求,可以使用match,或者任何请求都可以就使用any

Route::match(['get', 'post'], '/', function () {
    //
});

Route::any('foo', function () {
    //
});

如果有将路由指向任何HTML表单POST,PUT或DELETE放在web.php中,应当包括CSRF令牌字段。否则,请求将被拒绝。

<form method="POST" action="/profile">
    {{ csrf_field() }}
    ...
</form>

路由参数

所需参数

有时需要捕捉路由中的URI字段,可以通过以下方式实现

Route::get('user/{id}', function ($id) {
    return "User: $id";
});

如下图所示:

可以根据自己的想法来定义更多的路线参数

Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
    //
});

可选参数

有时可能需要指定一个路由参数,但将该路由参数的存在设为可选。您可以通过?在参数名称後放置一个标记来实现。确保给路由对应的变量一个默认值:

Route::get('user/{name?}', function ($name = null) {
    return $name;
});

Route::get('user/{name?}', function ($name = 'John') {
    return $name;
});

正规表达法约束

您可以使用where路由实例上的方法来限制路由参数的格式。该where方法接受参数的名称和定义参数应如何约束的正则表达式:

Route::get('user/{name}', function ($name) {
    //
})->where('name', '[A-Za-z]+'); // 他就会找出$name这个参数,符合规则的字段

Route::get('user/{id}', function ($id) {
    //
})->where('id', '[0-9]+');

Route::get('user/{id}/{name}', function ($id, $name) {
    //
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

全局约束

如果您希望路由参数始终受给定正则表达式的约束,则可以使用该pattern方法。您应该在boot您的方法中定义这些模式RouteServiceProvider

/**
 * Define your route model bindings, pattern filters, etc.
 *
 * @return void
 */
public function boot()
{
    Route::pattern('id', '[0-9]+');

    parent::boot();
}

一旦定义了模式,它就会自动应用於使用该参数名称的所有路由:

Route::get('user/{id}', function ($id) {
    // Only executed if {id} is numeric...
});

命名路由

命名路由允许为特定路由方便地生成 URL 或重定向。您可以通过将name方法链接到路由定义来为路由指定名称:

Route::get('user/profile', function () {
    //
})->name('profile');

您还可以为控制器操作指定路由名称:

Route::get('user/profile', 'UserController@showProfile')->name('profile');

生成命名路由的 URL

为给定路由指定名称後,您可以在通过全局route函数生成 URL 或重定向时使用该路由的名称:

// Generating URLs...
$url = route('profile');

// Generating Redirects...
return redirect()->route('profile');

如果命名路由定义了参数,您可以将参数作为第二个参数传递给route函数。给定的参数将自动插入到 URL 的正确位置:

Route::get('user/{id}/profile', function ($id) {
    //
})->name('profile');

$url = route('profile', ['id' => 1]);

<<:  CSS微动画 - Loading来了!终於要出款文字版本的了!

>>:  使用回归分析与其意义 | ML#Day15

Swift 新手- 资讯安全讯息加密

社群软件的用户间交谈讯息是如何做到资讯安全保护? 关於端对端加密 隐私与安全对我们来说极度重要,因此...

{Day28}Biometric

Biometric Biometric让用户不必每次打开APP时都记住帐户用户名和密码,只需使用生物...

【情蒐阶段】确认自己的目标、熟悉职缺市场

今天早上泡了杯 wushwush,打开我的 Leetcode, 啊又是一个觉得智力不足的 momen...

Day 48. 下载个范例ios app来试着build

继前天吧,我把新创apple id加入developer,然後没付费的状态,这个时候好像是叫做per...

Quartz.Net Job整合DI的生命周期问题

Quartz.Net 提供直接整合.Net Core DI的扩展,安装底下的套件即可 Install...