laravel路由配置

huaweichenai發表於2023-02-13

在laravel框架中,如何訪問指定控制器中的資訊內,在laravel框架中如果你想要訪問指定的控制器內的方法時,你需要進行路由註冊,只有進行過路由註冊的地址才能夠訪問,不然的話會顯示404,那麼如何進行路由註冊呢,下面的內容就是如何進行路由註冊一級路由註冊的規則

所有的 Laravel 路由都在 routes 目錄中的路由檔案中定義,這些檔案都由框架自動載入。routes/web.php 檔案用於定義 web 介面的路由。這裡面的路由都會被分配給 web 中介軟體組,它提供了會話狀態和 CSRF 保護等功能。定義在 routes/api.php 中的路由都是無狀態的,並且被分配了 api 中介軟體組

這裡我的域名為:local.test.com

一:可用的路由註冊方法:

Route::get($uri, $callback);  #get請求路由
Route::post($uri, $callback); #post請求路由
Route::put($uri, $callback);  #put請求路由
Route::patch($uri, $callback);#patch請求路由
Route::delete($uri, $callback);#delete請求路由
Route::options($uri, $callback);#options請求路由
Route::match(['get', 'post'], $uri,$callback);#多種請求路由
Route::any($uri, $callback);#所有請求路由

指向 web 路由檔案中定義的 POST、PUT 或 DELETE 路由的任何 HTML 表單都應該包含一個 CSRF 令牌欄位,否則,這個請求將會被拒絕

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

二:基本路由註冊方法

1:路由直接輸出

在routes/web.php檔案中新增:

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

在瀏覽器上輸入local.test.com/test時瀏覽器上輸出的是Hello World

2:路由訪問控制器

在routes/web.php檔案中新增:

Route::get('test', 'TestController@index');

然後在app/Http/Controllers目錄下新建一個TestController.php檔案

<?php
namespace App\Http\Controllers;
use Illuminate\Routing\Controller as BaseController;
class TestController extends BaseController {
    public function index() {
        return '11';
    }
}

在瀏覽器上輸入local.test.com/test時瀏覽器上輸出的是11

3:重定向路由

在routes/web.php檔案中新增:

Route::redirect('/here', '/there', 301);

表示的是瀏覽器訪問local.test.com/here就會重定向到local.test.com/there

4:檢視路由

在routes/web.php檔案中新增:

Route::view('/test', 'test');

上述程式碼表示的是不經過控制器直接渲染檢視檔案test.php,在resources/views目錄下新建一個test.php檔案,裡面寫上html程式碼,然後在瀏覽器訪問local.test.com/test是顯示的就是test.php內的html程式碼內容

還可以像檢視檔案傳遞引數,例:

Route::view('/test', 'test',['name' => 'nihao']);

在html中使用<?= $name?>使用傳遞來的引數

5:路由引數

在routes/web.php檔案中新增:

Route::get('test/{id}', function ($id) {
    return $id;
});

在瀏覽器上輸入local.test.com/test/10,這時候瀏覽器上顯示的是10

你還可以對傳遞的引數進行校驗

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

上述的檢測是id引數必須是數字,如果這時候你輸入的是local.test.com/test/abc,這時候顯示的是404,你輸入local.test.com/test/1時,正確

如果檢測的引數是多個的話,where裡的引數是一個陣列,例:

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

6:配置全域性約束

修改app/Providers目錄下的RouteServiceProvider.php檔案的boot方法:

這裡我配置所有的id引數必須是數字:

public function boot() {
    Route::pattern('id', '[0-9]+');
    parent::boot();
}

配置完成之後訪問有id引數的url是如果id你輸入的不是數字,這時候顯示的是404

7:命名路由

命令路由簡單來說就是給路由起別名

例:

在routes/web.php檔案中新增:

Route::get('test/test', 'TestController@test')->name('test');

然後在另一個路由對應的方法中輸入

// 生成 URL...
$url = route('test');
// 生成重定向...
return redirect()->route('test');

8:中介軟體配置約束

(1):建立一箇中介軟體

使用命令列在專案目錄下輸入

php artisan make:middleware CheckAge #Check 表示中介軟體檔名稱

這時候在App/Http/Middleware目錄下就會生成一個Check.php檔案

修改CheckAge.php 檔案:

<?php
namespace App\Http\Middleware;
use Closure;
class Check
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($request->route()->named('profile')) {
            return redirect('/test');
        }
        return $next($request);
    }
}

(2):註冊中介軟體

在app/Http/Kernel.php檔案中的$routeMiddleware變數中新增:

'check' => \App\Http\Middleware\Check::class,

(3):配置中介軟體約束

在routes/web.php檔案中:

Route::middleware(['check'])->group(function () {
    Route::get('/', function () {
        // 使用 check 中介軟體
    });
    Route::get('/test', function () {
        // 使用 check 中介軟體
    });
});

Route::middleware(['check'])->group內的所有路由配置都遵循check.php中介軟體的規則

相關文章