首頁  >  文章  >  php框架  >  laravel第二講:路由的定義及與控制器綁定

laravel第二講:路由的定義及與控制器綁定

齐天大圣
齐天大圣原創
2020-12-08 22:31:081918瀏覽

我們知道,網路中的路由器是用來選擇路徑、轉送分組的,那麼框架中的路由是用來幹嘛的呢?這裡的路由是用來接收http請求的路徑,透過設定路徑來存取特定程式的功能。路由是框架的核心功能之一,基本所有主流框架都有路由功能。並且,我們可以透過設定路由來將一些長的、深的路徑該成短的、淺的路徑(非常利於seo的一個功能)。

預設路由檔案

所有的laravel#路由都在根目錄的routes目錄下的路由檔案定義,框架預設自動載入這個目錄下的文件。我們來看看routes/web.php這個檔案

use Illuminate\Support\Facades\Route;

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

#基本路由

現在,我們在web.php檔案中,新建一個最簡單的路由,程式碼如下:

Route::get('index', function () {
    return "study laravel";
});

現在,我們在瀏覽器中輸入localhost:8000/index就可以看到"study laravel"這句話了。

常見路由方法

除了上述了get方法外,經常使用的路由方法有:post,put,delete,any,match 。

這裡的any方法表示不管是什麼請求方式都可以,可以是get/post/put等請求方式,它都會處理。而match可以用來指定多個請求,下面來示範match的用法:

Route::match(['get', 'post'], "list", function ()
{
    return 'list';
});

#參數傳遞

##的,我們在路由中也會加入參數。例如/news/1這樣是非常的常見。 lavarel的路由方法支援參數的傳遞,如:

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

上述的路由雖然能夠傳遞參數,但還是無法滿足我的需求,我希望{id}這個參數必須是數字,那麼,可以這樣:

Route::get('news/{id}', function ($id) {
    return 'news:' . $id;
})->where('id', '\d+');

我們也可以傳遞多個參數,閉包中的參數會自動一一對應,如:

Route::get('/name/{name}/age/{age}', function($name, $age) {
    echo "name:$name age:$age";
})->where(['name' => '\w+', 'age' => '\d+']);

路由與控制器綁定

首先,我們建立一個控制器檔案app\Http\Controllers\IndexController.php,程式碼如下:

<?php
namespace App\Http\Controllers;
class IndexController extends Controller
{
    public function news ($id)
    {
        echo "news:$id";
    }
}

現在修改路由檔案web.php

Route::get(&#39;news/{id}&#39;, &#39;IndexController@news&#39;)->where(&#39;id&#39;, &#39;\d+&#39;);

現在透過/news/1就能存取IndexController控制器中的news方法了。

若是建立了app/Http/Controllers/Home/IndexController.php,那麼這個控制器的路由該如何設定呢?方法如下:

Route::get(&#39;home&#39;, &#39;Home\IndexController@index&#39;);

以上是laravel第二講:路由的定義及與控制器綁定的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn