资源控制器

Laravel 资源路由将典型的 CRUD 路由分配给具有单行代码的控制器。例如,你可能希望创建一个控制器来处理应用程序存储的照片的所有 HTTP 请求。使用 make:controller Artisan 命令,我们可以快速创建这样的控制器:

php artisan make:controller PhotoController --resource

此命令将在 app/Http/Controllers/PhotoController.php 生成一个控制器。控制器将包含每个可用资源操作的方法。

资源控制器外观的示例

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PhotoController 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)
    {
        //
    }
}

资源控制器的示例共享下表中方法名称。

接下来,你可以向控制器注册资源丰富的路由:

Route::resource('photos', 'PhotoController');

此单一路由声明创建多个路由来处理资源上的各种操作。生成的控制器已经有针对每个操作的存根方法,包括通知你它们处理的 HTTP 谓词和 URI 的注释。

资源控制器处理的操作

动词 URI 行动 路线名称
得到 /photos 指数 photos.index
得到 /photos/create 创建 photos.create
POST /photos 商店 photos.store
得到 /photos/{photo} 节目 photos.show
得到 /photos/{photo}/edit 编辑 photos.edit
PUT / PATCH /photos/{photo} 更新 photos.update
删除 /photos/{photo} 破坏 photos.destroy