📌  相关文章
📜  php artisan make:controller --resource 命令 - PHP (1)

📅  最后修改于: 2023-12-03 15:18:19.336000             🧑  作者: Mango

PHP中的控制器

在 Laravel 框架中,控制器充当了将web路由与模型进行交互的中间层。

创建控制器

创建一个控制器的命令可以通过 php artisan make:controller 进行,其中 --resource 标志将为您创建支持资源路由的控制器。

php artisan make:controller UserController --resource

这将在 app/Http/Controllers 文件夹中创建一个名为 UserController 的控制器,它支持CRUD操作。

控制器方法

在控制器中,我们可以定义许多方法来处理各种HTTP请求,如GET、POST、PUT和DELETE。我们可以像这样定义一个index()方法:

public function index()
{
    // return the view
    return view('user.index');
}

该方法将检索用户数据并将其放在视图中,最后通过 view() 返回视图。

使用控制器

在 routes/web.php 文件中定义路由:

Route::get('/user', 'UserController@index');

现在我们可以在浏览器中访问该路由,Laravel 将会调用 UserController 控制器的 index() 方法。

资源路由方法

在支持资源路由的控制器中,有许多自动创建的方法,以处理常规的CRUD操作。以下是其中一些方法的名称和其处理的 HTTP method:

  • index(): GET 请求,获取资源列表
  • create(): GET 请求,显示创建资源的表单
  • store(): POST 请求,将新资源保存到数据库
  • show(): GET 请求,显示特定资源
  • edit(): GET 请求,显示编辑资源的表单
  • update(): PUT/PATCH 请求,将资源更新到数据库
  • destroy(): DELETE 请求,从数据库中删除资源
示例代码

下面是展示如何使用控制器和使用资源路由的示例代码:

UserController.php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $users = User::all();

        return view('user.index', compact('users'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('user.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $validatedData = $request->validate([
            'name' => 'required|max:255',
            'email' => 'required|email|unique:users,email',
            'password' => 'required|confirmed',
        ]);

        User::create($validatedData);

        return redirect('/user')->with('success', 'User created successfully!');
    }

    /**
     * Display the specified resource.
     *
     * @param  User $user
     * @return \Illuminate\Http\Response
     */
    public function show(User $user)
    {
        return view('user.show', compact('user'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  User $user
     * @return \Illuminate\Http\Response
     */
    public function edit(User $user)
    {
        return view('user.edit', compact('user'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  User $user
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, User $user)
    {
        $validatedData = $request->validate([
            'name' => 'required|max:255',
            'email' => 'required|email|unique:users,email,' . $user->id,
            'password' => 'required|confirmed',
        ]);

        $user->update($validatedData);

        return redirect('/user')->with('success', 'User updated successfully!');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  User $user
     * @return \Illuminate\Http\Response
     */
    public function destroy(User $user)
    {
        $user->delete();

        return redirect('/user')->with('success', 'User deleted successfully!');
    }
}

routes/web.php

Route::resource('user', 'UserController');

这将自动生成以下路由:

| Verb | URI | Action | Route Name | | --------- | ------------------- | -------- | ----------------- | | GET | /user | index | user.index | | GET | /user/create | create | user.create | | POST | /user | store | user.store | | GET | /user/{user} | show | user.show | | GET | /user/{user}/edit | edit | user.edit | | PUT/PATCH | /user/{user} | update | user.update | | DELETE | /user/{user} | destroy | user.destroy |

结论:

控制器是 Laravel 中与外部世界交互的重要手段,您可以在其中定义许多方法并将其与 routes/web.php 文件中的路由相匹配来处理 HTTP 请求,以及在模型和数据库之间处理数据。资源控制器为我们提供了自动处理常规的 CRUD 操作的便捷方法,这也是 Laravel 便于使用的原因之一。