我們知道,網絡中的路由器是用來選擇路徑、轉發分組的,那么框架中的路由是用來干嘛的呢?這里的路由是用來接收http請求的路徑,通過設置路徑來訪問特定程序的功能。路由是框架的核心功能之一,基本所有主流框架都有路由功能。并且,我們可以通過設置路由來將一些長的、深的路徑該成短的、淺的路徑(非常利于SEO的一個功能)。
默認路由文件
所有的laravel路由都在根目錄的routes目錄下的路由文件定義,框架默認自動加載這個目錄下的文件。我們看看routes/web.php這個文件
use?IlluminateSupportFacadesRoute; 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+']);
路由與控制器綁定
首先,我們創建一個控制器文件appHttpControllersIndexController.php,代碼如下:
<?php namespace AppHttpControllers; class IndexController extends Controller { public function news ($id) { echo "news:$id"; } }
現在修改路由文件web.php
Route::get('news/{id}',?'IndexController@news')->where('id',?'d+');
現在通過/news/1就能訪問到IndexController控制器中的news方法了。
若創建了app/Http/Controllers/Home/IndexController.php,那么這個控制器的路由該如何設置呢?方法如下:
Route::get('home',?'HomeIndexController@index');