1. 程式人生 > >Laravel路由和控制器的繫結

Laravel路由和控制器的繫結

路由和控制器的關係

路由檔案地址在\app\Http\routes.php,我們來看兩種不同的路由。

1 2 3 4 5 6 7 8 Route::get('/'function () { return view('welcome'); }); Route::get('/hi'function () { return 'hello world'; });

以上均為繫結匿名函式的路由,雖然可以返回檢視,也可以返回字串,但本質都是一樣的。

1 2 Route::get('/blog','[email protected]'); Route::get('/post/{slug}'
,'[email protected]');

這兩種是繫結控制器的路由,控制器類BlogController下有兩個函式,index和showPost,可以呼叫。

那麼問題來了,究竟應該選用哪種?

你不可能把複雜的業務邏輯都寫在一個匿名函式裡,所以你要學會新建控制器。

1 Route::get('/mvc''[email protected]');  

一.新增新控制器

控制器資料夾地址在Laravel資料夾下\app\Http\Controllers,我們繼續使用artisan控制檯建立一個新控制器

1 php artisan make:controller MyController

然後,回到控制器目錄,一份新的MyController.php檔案被建立了,程式碼如下:

1 2 3 4 5 6 7 8 9 10 11 12 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; class MyController extends Controller { // }

我們修改MyController類,同時再建立一個檢視。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <?php namespace
 App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; class MyController extends Controller { public function hello() { return View('myview'); } }

如果這麼寫,就意味著一旦使用者訪問URL:laravel/public/mvc,路由就會交給MyController控制器的hello函式,hello函式返回myview檢視,即返回myview.blade.php

 我們看看myview.blade.php的程式碼

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 @extends('layouts.app') @section('content') <div class="container"> <div class="row"> <div class="col-md-10 col-md-offset-1"> <div class="panel panel-default"> <div class="panel-heading">{{ $d1 }}</div> <div class="panel-body"> this is my view! </div> </div> </div> </div> </div> @endsection

這裡的{{ $d1 }}希望用一個變數的值來代替,所以,我們把MyController控制器修改為

1 2 3 4 5 6 7 class MyController extends Controller { public function hello() { return View('myview',['d1'=>'a1']); } }