路由和控制器的關係php
路由文件地址在\app\Http\routes.php,咱們來看兩種不一樣的路由。html
Route::get('/', function () { return view('welcome'); }); Route::get('/hi', function () { return 'hello world'; });
以上均爲綁定匿名函數的路由,雖然能夠返回視圖,也能夠返回字符串,但本質都是同樣的。laravel
Route::get('/blog','BlogController@index'); Route::get('/post/{slug}','BlogController@showPost');
這兩種是綁定控制器的路由,控制器類BlogController下有兩個函數,index和showPost,能夠調用。bash
那麼問題來了,究竟應該選用哪一種?mvc
你不可能把複雜的業務邏輯都寫在一個匿名函數裏,因此你要學會新建控制器。app
Route::get('/mvc', 'MyController@hello');
一.添加新控制器函數
控制器文件夾地址在Laravel文件夾下\app\Http\Controllers,咱們繼續使用artisan控制檯建立一個新控制器post
php artisan make:controller MyController
而後,回到控制器目錄,一份新的MyController.php文件被建立了,代碼以下:this
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; class MyController extends Controller { // }
咱們修改MyController類,同時再建立一個視圖。spa
<?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的代碼
@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控制器修改成
class MyController extends Controller { public function hello() { return View('myview',['d1'=>'a1']); } }