Laravel学习笔记(三)——控制器,处理请求与返回响应

qcgzxw 2018年10月22日 08:45 57

balabala

上一章节的最后一个段落中的部分内容,可能看了这一章才能完全理解。这一章我们主要学习控制器,包括控制器的介绍和控制器的使用,以及对上一章节中路由的用法的补充。但是,不做过多Controller的写法和技巧分析,仅仅只介绍Controller以及Laravel中Controller与route的关联。

Laravel中的控制器

作用

和一般的MVC框架中的Controller作用一样,在Laravel中,控制器的主要作用是接受路由转发的请求,从模型获取数据后,再将数据渲染到视图一并输出给用户。控制器是程序的主要逻辑实现部分。

命名规则

一般用一个单词后面加Controller的方式来命名控制器。单词首字母大写。形如:TestController、ArticlesController等。

控制器目录

第一章就有提到过,Laravel中所有控制器都在 app/Http/Controllers/ 目录下。

控制器生成方式

  1. 利用自带的artisan生成。(<-推荐)
  2. 新建空白文件。

作为一个优美的PHP框架,怎么能通过新建空白文件并重命名的方式来创建Controller呢?我们可以直接用php artisan make:controller TestController命令生成一个名叫TestController的控制器模板。由于用artisan生成的控制器模板自带命名空间和一些默认的引用,我们只需要在新生成的模板里面的class里写控制器方法即可! 2018-10-10_094450.png

[owen@127 blog]$ php artisan make:controller TestController
Controller created successfully.

PS:php命令请自行添加到全局变量;这条命令是在Laravel项目根目录下运行的。

路由转发请求到控制器

转发请求到控制器的路由规则

路由转发到控制器有两种写法,为了方便,我们经常选择第一种,而第二种也会在某些地方用到。(路由别名、路由群组等)

<?php
Route::get('/', 'TestController@index');# 第一种,将get请求"/"路径的请求转发到TestController中的index方法。


Route::get('/', ['uses' => 'TestController@index']);# 第二种,和第一种功能一样,这里使用数组的方式可以很方便的在数组里添加其他字段来实现路由别名等功能。


Route::get('/', [
        'as' => 'test', 
        'uses' => 'TestController@index'
]);# 在第二种写法的基础上,添加该条路由的别名为test

路由参数

上一章的最后一段落有提到本章的内容,而且在控制器中实现了路由参数的调用。

在路由中传入的参数,可以在控制器中简单的通过$来调用该参数。具体代码如下:

web.php

<?php
Route::get('/{name}', 'TestController@index');# 转发请求至TestController控制器中的index方法

TestController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TestController extends Controller
{
    public function index($name){
        return 'TestController' . $name;
    }
}

路由别名

Route::get('/', [
        'as' => 'test', 
        'uses' => 'TestController@index'
]);# 为该条路由添加别名为test