1 路由機制
MVC中路由是一個非常重要的功能,其作用是:
A.根據用戶訪問(URL)匹配傳入的請求及請求附帶的參數;
B.請求映射Controller的Action方法,並把參數傳入;
C.返回Action方法處理結果;
下圖以簡單的形式表示一個用戶請求:
的路由
在Laravel 5.1.4中,路由設定檔是 app/Http/routes.php。
2.1 直接傳回字串的路由
在原有的程式碼後面追加如下程式碼段:
Route::get('/hw', function () { return 'Hello World'; });
開啟瀏覽器存取:http://localhost:801/hw,如下圖示:
2.2 返回視圖的路由
在上面的程式碼中再追加如下程式碼區:
Route::get('/home', function () { return view('home'); });
在目錄resources/views下建立視圖檔:home.php,內容如下:在目錄resources/views下建立視圖檔案:home.php,內容如下:home.
<html> <body> <h1>home</h1> </body> </html>
如果上例的程式碼中需要傳送參數給檢視頁呢?修改我們的路由代碼:
Route::get('/home', function () { return view('home', ['name' => '张三']); });
<html> <body> [<?php echo $name; ?>],您好! </body> </html>
修改上例中的路由代碼為:
Route::get('/home', function () { return view('public.demo.home', ['name' => '张三']); });
Route::get('user/{name}', function($name) { return '用户姓名:'.$name; });
呢?修改路由代碼:
Route::get('user/{name}/{age}', function($name,$age) { return '用户姓名:'.$name.',年龄:'.$age; });
假如age參數不是必須的呢?再次修改路由代碼:
Route::get('user/{name}/{age?}', function($name,$age=null) { return '用户姓名:'.$name.',年龄:'.$age; });
訪問位址:http://localhost:801/user/jack
2.4 路由參數的限制
在正常情況下,用戶存取的某些參數是一定有一定參數的規則,例如讀取用戶資訊時的用戶ID可能是數字,修改新聞資訊時的新聞ID可能是GUID等等。
修改routes.php文件,追加以下代碼:Route::get('new/{id}', function($id) { return '新闻ID:'.$id; })->where('id', '[0-9]+');
可存取 http://localhost:801/new/abc 時則提供頁面不存在:
,修改上例的路由代碼:Route::get('new/{id}/{title}', function($id,$title)
{
return '新闻ID:'.$id.',新闻标题:'.$title;
})->where(['id' => '[0-9]+', 'title' => '[a-z]+']);
另外,我們可以設定全域的限制條件,開啟檔案:app/Providers/RouteServiceProviders.php,修改boot方法如下:
public function boot(Router $router) { // $router->pattern('id', '[0-9]+'); parent::boot($router); }
Route::get('new/{id}', function($id) { return '新闻ID:'.$id; });
在routes.php中可以取得路由參數,以此來做其他的操作,修改上例的路由代碼:
Route::get('new/{id}', function(Request $request, $id) { if ($request->route('id') == '2') { return '新闻ID是2'; }else{ return '新闻ID不是2,值是:'.$id; } });
?後插入新的一行:
🎜🎜🎜🎜use Illuminate\Http\Request;