Laravel 入门:06-控制器

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

hefengbao 发布于 2022.12.14 ,最后更新于 2023.09.18

一、创建控制器

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

php artisan make:controller UserController
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    //
}

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

php artisan make:controller UserController -r
<?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)
    {
        //
    }
}

二、定义路由

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

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');

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

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

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

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

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

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

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

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    ...

    public fun export()
    {
      //todo
    }
}
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

Laravel    Laravel   Laravel 入门  

hefengbao

暂无个人简介

有0条评论

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

来源:

https://www.8ug.icu/articles/laravel-tutorial-06-controllers-ZJPd2PbjYK