Laravel 入门:06-控制器

一、创建控制器

控制器在 app/Http/Controllers 目录下,默认新建的控制器应继承自该目录下的 Controller::class,可以使用 php artisan make:controller 命令创建类:

1
php artisan make:controller UserController
1
2
3
4
5
6
7
8
9
10
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
//
}

如上面代码所示,里面没有任何方法,我们可以添加 -r 参数,创建一个资源控制器(resource controller),即所谓的 CURD:它代表创建(Create)、更新(Update)、读取(Read)和删除(Delete)操作:

1
php artisan make:controller UserController -r
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
public function index()
{
//
}

public function create()
{
//
}

public function store(Request $request)
{
//
}

public function show($id)
{
//
}

public function edit($id)
{
//
}

public function update(Request $request, $id)
{
//
}

public function destroy($id)
{
//
}
}

二、定义路由

参照在路由那一篇的内容,我们可以这样定义:

1
2
3
4
5
6
7
Route::get('/users',[\App\Http\Controllers\UserController::class, 'index'])->name('users.index');
Route::get('/users/create', [\App\Http\Controllers\UserController::class, 'create'])->name('users.create');
Route::post('/users/store', [\App\Http\Controllers\UserController::class, 'store'])->name('users.store');
Route::get('/users/{id}', [\App\Http\Controllers\UserController::class, 'show'])->name('users.show');
Route::get('/users/{id}/edit', [\App\Http\Controllers\UserController::class, 'edit'])->name('users.edit');
Route::put('/users/{id}/update', [\App\Http\Controllers\UserController::class, 'update'])->name('users.update');
Route::delete('/users/{id}', [\App\Http\Controllers\UserController::class, 'destroy'])->name('user.destroy');

但是对于资源控制器,我们可以把上面的路由简化为:

1
Route::resource('/users', \App\Http\Controllers\UserController::class);

有时我们可能不需要删除操作,那么可以这样排除掉:

1
Route::resource('/users', \App\Http\Controllers\UserController::class)->except(['destroy']);

或者只需要 indexshow ,那么可以只添加:

1
Route::resource('/users', \App\Http\Controllers\UserController::class)->only(['index','show']);

当然这只是脚手架创建的一般功能下的控制器,如果要实现别的功能,比如导出,我们可以继续在 UserController::class 中添加添加 export 方法,并定义相应的路由:

1
2
3
4
5
6
7
8
9
10
11
12
13
namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
...

public fun export()
{
//todo
}
}
1
2
Route::get('/users/export', [\App\Http\Controllers\UserController::class, 'export'])->name('users.export');
Route::resource('/users', \App\Http\Controllers\UserController::class);

Demo:https://github.com/hefengbao/laravel-demo