我们之前都是将一个闭包函数作为第二个参数传入到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
, 当然怎么命名都不会让程序错误,这里大家可以想一下为什么控制器类中的单词要使用复数呢?
我们来访问一下:
从错误提示可以看出,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'));
}
}
我们再来运行下:
就那么的简单,我们再来玩一下,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这些字了。
好了,本节到这里结束。这几节都非常的简单,单存阅读的话,很快就能看完,一定要自己去测试和运行,否则后续的教程是肯定学不下去的。