从零开始学laravel教程目录

我们之前都是将一个闭包函数作为第二个参数传入到Route类对应的方法中,但是这种方式我们在做测试的时候可以使用下,真正开发的时候还是需要将让route能指向对应的控制器类的方法的,为什么要这么做?

第一:这样不会让你的路由文件太过臃肿和混乱,其次在项目正式上线前我们会执行php artisan route:cache来生成一个路由缓存文件,官方说这样能使路由解析的速度快上100倍,是不是吹牛,我不知道,但是变快是肯定的,但是执行这条命令的时候,只有route对应控制器的代码才会被缓存,所以从这两点来看,我不建议大家在正式项目开发的时候去路由上写闭包函数。

我们还是打开我们项目的route.php文件, 这次我们将文件中的代码改成这样:

// 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

回过头来再来看:

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

这里PagesController是一个控制器类,home是该控制器类的方法,整条语句的意思就是当访问/的时候,就会去执行PagesController类中的home方法。

PS:这里要提一下命名规范,类名要用驼峰命名法,控制器类我建议大家以单词的复数 + Controller.php, 如我们命名成PagesController.php,但不要命名成PageController.php, 当然怎么命名都不会让程序错误,这里大家可以想一下为什么控制器类中的单词要使用复数呢?

我们来访问一下:

Laravel路由到控制器

从错误提示可以看出,route已经指向了控制器,但是说控制器不存在,那么现在我们要去建立控制器类了,我们可以在app/Http/Controllers/目录中手动建立PagesController.php文件,然后让其继承app/Http/Controllers/Controller.php这个类。不过这么做似乎太过麻烦了,这时候我们就可以用过laravel强大的Artisan来自动生成这个控制器类:

➜ 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这些字了。

好了,本节到这里结束。这几节都非常的简单,单存阅读的话,很快就能看完,一定要自己去测试和运行,否则后续的教程是肯定学不下去的。


周继平
386 声望50 粉丝

产品&研发