Laravel 路由与控制器:从基础到高级的完整教程
                           
天天向上
发布: 2025-01-18 12:05:06

原创
442 人浏览过

Laravel 的 路由与控制器 是构建应用程序的核心组件。路由用于处理传入的 HTTP 请求并将它们分配给相应的控制器方法,控制器负责处理请求并返回响应。以下是 Laravel 路由与控制器 的详细介绍。

1. 路由基础

1.1 定义路由

在 Laravel 中,路由通常定义在 routes/web.php 文件中。你可以使用不同类型的 HTTP 请求方法(如 GET、POST、PUT、DELETE)来定义路由。

例如,定义一个简单的 GET 路由:

Route::get('/', function () {
    return view('welcome');
});

1.2 路由参数

Laravel 路由支持动态参数,这意味着你可以通过 URL 获取参数并将它们传递给控制器或闭包。

例如,定义一个带有动态参数的路由:

Route::get('user/{id}', function ($id) {
    return 'User ID is ' . $id;
});

1.3 路由约束

你可以为路由中的参数设置正则表达式约束,确保只有符合指定模式的参数才会被接受。

例如,限制 id 参数为数字:

Route::get('user/{id}', function ($id) {
    return 'User ID is ' . $id;
})->where('id', '[0-9]+');

1.4 命名路由

你可以为路由指定一个名字,这样在生成 URL 或重定向时可以使用路由名称,而不是 URL 路径。

例如,命名路由:

Route::get('profile', function () {
    return view('profile');
})->name('profile');

在视图或控制器中生成 URL:

$url = route('profile');  // 生成 /profile 的 URL

1.5 路由中间件

中间件用于过滤 HTTP 请求,检查请求的合法性。你可以在路由定义中使用中间件来处理认证、日志记录等任务。

例如,使用 auth 中间件保护路由:

Route::get('dashboard', function () {
    return view('dashboard');
})->middleware('auth');

2. 控制器

2.1 创建控制器

你可以使用 Artisan 命令来创建控制器:

php artisan make:controller UserController

这会在 app/Http/Controllers 目录下创建一个 UserController.php 文件。你可以在控制器中定义处理请求的方法。

2.2 控制器方法

在控制器中,你可以创建方法来处理特定的请求。例如,在 UserController 中定义一个 show 方法来显示用户信息:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    public function show($id)
    {
        return 'User ID is ' . $id;
    }
}

2.3 路由与控制器绑定

你可以将路由与控制器方法绑定,而不是使用闭包。例如,将上面的 show 方法与路由绑定:

Route::get('user/{id}', [UserController::class, 'show']);

2.4 资源控制器

Laravel 提供了资源控制器,它会为你自动创建处理常见 CRUD 操作的路由。你可以通过 php artisan make:controller 命令来生成资源控制器。

php artisan make:controller PostController --resource

生成的 PostController 包含以下方法:

  • index():显示所有资源。
  • create():显示创建资源的表单。
  • store():存储新资源。
  • show($id):显示指定资源。
  • edit($id):显示编辑资源的表单。
  • update($id):更新指定资源。
  • destroy($id):删除指定资源。

你可以通过以下代码将资源路由与控制器绑定:

Route::resource('posts', PostController::class);

这会自动生成符合 RESTful 风格的路由,包括 GET /postsPOST /postsGET /posts/{id} 等。

2.5 控制器的依赖注入

Laravel 允许你在控制器方法中使用依赖注入,自动将需要的服务或类注入到控制器方法中。例如:

namespace App\Http\Controllers;

use App\Models\Post;

class PostController extends Controller
{
    public function show($id, Post $post)
    {
        $post = $post->findOrFail($id);
        return view('post.show', compact('post'));
    }
}

Laravel 会自动解析 Post 模型并将其注入到 show 方法中。

2.6 控制器中间件

你可以将中间件应用到控制器中,而不仅仅是单个路由。例如,应用 auth 中间件到整个控制器:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class DashboardController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }

    public function index()
    {
        return view('dashboard');
    }
}

3. 路由与控制器最佳实践

  • 使用资源控制器:对于标准的 CRUD 操作,使用资源控制器来减少代码量。
  • 遵循 RESTful 规范:尽量按照 RESTful 路由命名规范定义路由和控制器方法。
  • 控制器方法分离:将复杂的业务逻辑分离到服务层或独立的类中,保持控制器的简洁。
发表回复 0

Your email address will not be published. Required fields are marked *