Laravel路由和控制器的繫結
阿新 • • 發佈:2019-01-09
路由和控制器的關係
路由檔案地址在\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' ]);
}
}
|