4. 路由到控制器 - Laravel從零開始教程

從零開始學laravel教程目錄php

咱們以前都是將一個閉包函數做爲第二個參數傳入到Route類對應的方法中,可是這種方式咱們在作測試的時候可使用下,真正開發的時候仍是須要將讓route能指向對應的控制器類的方法的,爲何要這麼作?laravel

第一:這樣不會讓你的路由文件太過臃腫和混亂,其次在項目正式上線前咱們會執行php artisan route:cache來生成一個路由緩存文件,官方說這樣能使路由解析的速度快上100倍,是否是吹牛,我不知道,可是變快是確定的,可是執行這條命令的時候,只有route對應控制器的代碼纔會被緩存,因此從這兩點來看,我不建議你們在正式項目開發的時候去路由上寫閉包函數。緩存

咱們仍是打開咱們項目的route.php文件, 此次咱們將文件中的代碼改爲這樣:bash

// Route::get('/', function () {
//     $users = ['Zhoujiping', 'Kuker Chou'];
//     return view('welcome', compact('users'));
// });

Route::get('/', 'PagesController@home');

這裏先說下get()方法,get()對應http方法中的get,使用get()方法,就說明這條路由是經過method=get來訪問的,那麼若是http訪問的method=post請求呢,那就是對應Route::post()方法,是否是很好記,下面咱們列舉下這些方法:閉包

Route::get()      //  對應http的get
Route::post()     //  對應http的post
Route::put()      //  對應http的put
Route::patch()   //   對應http的patch
Route::delete()  //   對應http的delete

回過頭來再來看:app

Route::get('/', 'PagesController@home');

這裏PagesController是一個控制器類,home是該控制器類的方法,整條語句的意思就是當訪問/的時候,就會去執行PagesController類中的home方法。函數

PS:這裏要提一下命名規範,類名要用駝峯命名法,控制器類我建議你們以單詞的複數 + Controller.php, 如咱們命名成PagesController.php,但不要命名成PageController.php, 固然怎麼命名都不會讓程序錯誤,這裏你們能夠想一下爲何控制器類中的單詞要使用複數呢?post

咱們來訪問一下:測試

Laravel路由到控制器

從錯誤提示能夠看出,route已經指向了控制器,可是說控制器不存在,那麼如今咱們要去創建控制器類了,咱們能夠在app/Http/Controllers/目錄中手動創建PagesController.php文件,而後讓其繼承app/Http/Controllers/Controller.php這個類。不過這麼作彷佛太過麻煩了,這時候咱們就能夠用過laravel強大的Artisan來自動生成這個控制器類:ui

➜ cd /usr/local/var/www/Laravel52 #切換到項目根目錄
➜ php artisan make:controller PagesController #生成控制器 
Controller created successfully.

咱們不須要去記php artisan的任何命令,你只要知道它有哪些功能便可,忘記命令的時候執行下php artisan查看下命令便可。若是要查看某條命令的具體信息,你還能夠這麼作:

➜ php artisan help make:controller           
Usage:
  make:controller [options] [--] <name>

Arguments:
  name                  The name of the class

Options:
      --resource        Generate a resource controller class.
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable ANSI output
  -n, --no-interaction  Do not ask any interactive question
      --env[=ENV]       The environment the command should run under.
  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Help:
 Create a new controller class

如今咱們能夠在app/Http/Controllers/找到咱們的PagesController.php類了,咱們打開它,默認就生成了下面的代碼:

<?php

// 聲明命名空間
namespace App\Http\Controllers;

// 下面兩句咱們暫時不用,一會咱們刪除它
use Illuminate\Http\Request;
use App\Http\Requests;

// 控制器類都會繼承Controller類
class PagesController extends Controller
{
    //
}

下面咱們寫上咱們的home方法:

<?php

namespace App\Http\Controllers;

class PagesController extends Controller
{
    public function home()
    {
        $users = ['Zhoujiping', 'Kuker Chou'];
        
        return view('welcome', compact('users'));
    }
}

咱們再來運行下:

laravel控制器

就那麼的簡單,咱們再來玩一下,route.php寫路由:

Route::get('about', 'PagesController@about');

PagesController中以下:

<?php

namespace App\Http\Controllers;

class PagesController extends Controller
{
    public function home()
    {
        $users = ['Zhoujiping', 'Kuker Chou'];
        
        return view('welcome', compact('users'));
    }

    public function about()
    {
        return 'About Page';
    }
}

ok, 咱們訪問http://localhost:8000/about就會出現About Page這些字了。

好了,本節到這裏結束。這幾節都很是的簡單,單存閱讀的話,很快就能看完,必定要本身去測試和運行,不然後續的教程是確定學不下去的。

相關文章
相關標籤/搜索