路由和控制器的关系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']); } }