在 Laravel 5.2 中,HTTP 控制器是用于处理 HTTP 请求的主要组件。控制器可以封装业务逻辑,并且可以使你的应用程序更加模块化和易于维护。下面我将详细介绍 Laravel 5.2 中 HTTP 控制器的基本概念,并提供一些示例。

创建控制器

在 Laravel 5.2 中,你可以使用 Artisan 命令来生成控制器类。

示例

假设我们要创建一个名为 PostsController 的控制器,可以使用以下命令:

php artisan make:controller PostsController
  • 1.

这将在 app/Http/Controllers 目录下生成一个名为 PostsController.php 的文件。

控制器方法

控制器通常包含一组方法,用于处理不同的 HTTP 请求。例如,你可以为 GET 请求创建一个方法,为 POST 请求创建另一个方法。

示例

假设我们有一个博客应用程序,需要处理文章的创建、读取、更新和删除(CRUD)操作。

// app/Http/Controllers/PostsController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Post;

class PostsController extends Controller
{
    /**
     * 显示所有文章。
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $posts = Post::all();
        return view('posts.index', compact('posts'));
    }

    /**
     * 显示创建文章的表单。
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('posts.create');
    }

    /**
     * 保存新创建的文章。
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $post = new Post;
        $post->title = $request->input('title');
        $post->body = $request->input('body');
        $post->save();

        return redirect()->route('posts.index');
    }

    /**
     * 显示指定文章的详情。
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $post = Post::findOrFail($id);
        return view('posts.show', compact('post'));
    }

    /**
     * 显示编辑文章的表单。
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $post = Post::findOrFail($id);
        return view('posts.edit', compact('post'));
    }

    /**
     * 更新指定的文章。
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $post = Post::findOrFail($id);
        $post->title = $request->input('title');
        $post->body = $request->input('body');
        $post->save();

        return redirect()->route('posts.show', $id);
    }

    /**
     * 删除指定的文章。
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $post = Post::findOrFail($id);
        $post->delete();

        return redirect()->route('posts.index');
    }
}
  • 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.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
注册路由

接下来,你需要在 routes.php 文件中注册控制器的路由。

示例

假设我们已经创建了 PostsController,现在需要在 routes.php 文件中注册对应的路由。

// routes.php

Route::get('/posts', 'PostsController@index');
Route::get('/posts/create', 'PostsController@create');
Route::post('/posts', 'PostsController@store');
Route::get('/posts/{id}', 'PostsController@show');
Route::get('/posts/{id}/edit', 'PostsController@edit');
Route::put('/posts/{id}', 'PostsController@update');
Route::delete('/posts/{id}', 'PostsController@destroy');
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
使用中间件

控制器中的方法可以使用中间件来保护路由,例如进行身份验证或授权检查。

示例

假设我们希望只有认证的用户才能访问 store, update, 和 destroy 方法。

// app/Http/Controllers/PostsController.php

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

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

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

// 在 routes.php 中注册路由
Route::group(['middleware' => 'auth'], function () {
    Route::post('/posts', 'PostsController@store');
    Route::put('/posts/{id}', 'PostsController@update');
    Route::delete('/posts/{id}', 'PostsController@destroy');
});
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
总结

在 Laravel 5.2 中,控制器是处理 HTTP 请求的核心组件。你可以通过定义控制器类和方法来组织你的业务逻辑,并通过路由将 HTTP 请求映射到相应的控制器方法上。使用控制器可以使你的代码更加清晰和易于维护。