控制器入门
具备以上理论知识后,下面我们来创建一个控制器,我们可以通过 Artisan 命令快速创建一个控制器:
php artisan make:controller TaskController
资源控制器
有时候在编写控制器时命名方法名称可能是最困难的,好在 Laravel 为常见的 REST/CRUD 控制器(在 Laravel 中称之为「资源控制器」)提供了一套约定规则,并为此提供了相应的 Artisan 生成器和路由定义方法,从方便我们一次为所有控制器方法定义路由。
首先,我们使用这个 Artisan 生成器来生成一个资源控制器(在之前命名后加上 --resource 选项):
php artisan make:controller PostController --resource
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
资源控制器方法列表
以上 PostController 控制器的每个方法都有对应的请求方式、路由命名、URL、方法名和业务逻辑约定。
HTTP请求方式 | URL | 控制器方法 | 路由命名 | 业务逻辑描述 |
---|---|---|---|---|
GET | post | index() | post.index | 展示所有文章 |
GET | post/create | create() | post.create | 发布文章表单页面 |
POST | post | store() | post.store | 获取表单提交数据并保存新文章 |
GET | post/{post} | show() | post.show | 展示单个文章 |
GET | post/{id}/edit | edit() | post.edit | 编辑文章表单页面 |
PUT | post/{id} | update() | post.update | 获取编辑表单输入并更新文章 |
DELETE | post/{id} | destroy() | post.desc | 删除单个文章 |
绑定资源服务器
通过上面的表格已经了解了 Laravel 中对资源路由的命名约定,Laravel 还为我们提供了一个 Route::resource 方法用于一次注册包含上面列出的所有路由,并且遵循上述所有约定:
Route::resource('post', 'PostController');