📜  Laravel控制器(1)

📅  最后修改于: 2023-12-03 14:43:51.401000             🧑  作者: Mango

Laravel控制器

Laravel 控制器是 MVC 模式中的 C(Controller)部分,用来处理应用程序接收到的 HTTP 请求并返回响应。如果你熟悉其他 Web 框架,你会发现 Laravel 的控制器非常简单易用。

在本篇文章中,我们将会介绍 Laravel 控制器的基础用法、方法、路由和中间件。

基础用法

创建一个控制器非常简单,只需要执行 php artisan make:controller 命令并指定控制器名称即可。例如,我们要创建一个处理首页请求的控制器:

php artisan make:controller HomeController

执行完命令后,会在 app/Http/Controllers 目录下创建一个 HomeController.php 文件,如下所示:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomeController extends Controller
{
    //
}

当然,这只是一个空控制器,我们需要在其中定义处理请求的方法。

public function index()
{
    return view('home.index');
}

然后,在 routes/web.php 文件中定义路由,让我们的请求指向这个控制器:

Route::get('/', 'HomeController@index');

这样,当用户打开首页时,Laravel 就会创建一个 HomeController 实例,并调用 index() 方法并返回响应结果。

控制器方法

控制器方法是处理请求的地方。一个控制器通常包含多个方法,每个方法处理不同的请求。如下所示,我们在 HomeController 中定义了一个 show() 方法,用来获取用户指定的文章:

public function show($id)
{
    $post = Post::find($id);

    return view('home.show')->with('post', $post);
}

上述方法接受 $id 作为参数,表示要获取的文章 ID。然后,我们通过模型获取到相应的文章,并将其传递给视图作为数据。

在路由中,我们可以使用占位符将参数传递给控制器方法:

Route::get('/posts/{id}', 'HomeController@show');

在这个例子中,我们创建了一个类似于 WordPress 的文章详细页面路由。当用户打开 http://example.com/posts/1 时,Laravel 就会查找 ID 为 1 的文章,然后调用 show() 方法返回响应。

中间件

中间件是 Laravel 框架中的一个强大概念。它可以在请求到达控制器之前和响应被发送到客户端之前修改请求和响应。例如,我们可以使用中间件来验证用户是否登录、检查请求是否来自受信任的域、记录请求响应时间等等。

在 Laravel 中,中间件是通过 app/Http/Kernel.php 中的 $middleware 属性加载的。这里是一个简单的例子,我们定义了一个 CheckUser 中间件来检查用户是否已登录:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class CheckUser
{
    public function handle($request, Closure $next)
    {
        if (!Auth::check()) {
            return redirect('/login');
        }

        return $next($request);
    }
}

然后,我们可以在 HomeController 中使用 middleware() 方法来指定要使用的中间件:

public function __construct()
{
    $this->middleware(CheckUser::class);
}

这样一来,当用户访问 HomeController 中的任何方法时,Laravel 就会执行 CheckUser,如果用户未登录,则会重定向到登录页面。

结论

在本文中,我们介绍了 Laravel 控制器的基础用法、方法、路由和中间件。需要注意的是,本文只是一个概述,Laravel 控制器中还有更多高级用法,例如资源路由、注入依赖项、控制器中的验证等等。如果您想深入了解 Laravel 控制器,请查阅官方文档。