【原创】Laravel中的路由

路由

<?php

use Illuminate\Support\Facades\Route;

Route::get('/', 'StaticPagesController@home')->name('home');
Route::get('/help', 'StaticPagesController@help')->name('help');
Route::get('/about', 'StaticPagesController@about')->name('about');
<li><a href="{{ route('help') }}">帮助</a></li>

查看路由列表

php artisan route:list

Laravel 提供了 resource 方法来定义路由

<?php

use Illuminate\Support\Facades\Route;

Route::resource('users', 'UsersController');

Route::resource() 方法可以遵从 RESFUL 架构为用户资源生成路由。该方法接受两个参数,第一个参数为资源名称,第二个是控制器名称。
以上代码等同于:

Route::get('/users', 'UsersController@index')->name('users.index');
Route::get('/users/create', 'UsersController@create')->name('users.create');
Route::get('/users/{user}', 'UsersController@show')->name('users.show');
Route::post('/users', 'UsersController@store')->name('users.store');
Route::get('/users/{user}/edit', 'UsersController@edit')->name('users.edit');
Route::patch('/users/{user}', 'UsersController@update')->name('users.update');
Route::delete('/users/{user}', 'UsersController@destroy')->name('users.destroy');

HTTP 请求 URL 动作 作用
GET /users UsersController@index 显示所有用户列表的页面
GET /users/{user} UsersController@show 显示用户个人信息的页面
GET /users/create UsersController@create 创建用户的页面
GET /users/{users}/edit UsersController@edit 编辑用户个人资料页面
PATCH /users/{user} UsersController@update 更新用户
DELETE /users/{user} UsersController@destroy 删除用户

应用

<?php

namespace App\Http\Controllers;

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

class UsersController extends Controller
{
    public function create()
    {
        return view('users.create');
    }

    public function show(User $user)
    {
        return view('users.show', compact('user'));
    }
}

Laravel 会自动解析定义在控制器方法中的 Eloquent 模型声明。以上代码的 show 方法中的 Eloquent 模型 User 对应的变量名 $user 会匹配路由片段中的 {user} ,Laravel 会自动注入与请求 URI 中传入的 ID 对应的用户模型实例。
此功能称为 「隐性路由模型绑定」,是 「约定优于配置」 范式的体现,同时满足以下两种情况,此功能会自动启用。

  1. 路由声明时必须使用 Eloquent 模型的单数小写格式来作为路由片段参数, User 对应 {user}
  2. 控制器方法参数中必须包含对应的 Eloquent 模型类型声明,并且是有序的。

当请求 weibo.test/user/1 满足以上两个条件时,Laravel 会自动查询 ID 为 1 的用户并赋值到变量 $user 中,如果数据库中找不到对应模型实例,会生成 HTTP 404 响应。

return view('users.show', compact('user'));

将用户对象 $user 通过 compact 方法转换为一个关联数组并作为第二个参数传递给 view 方法,将数据与视图进行绑定。

resource 限制

如果使用 resource 方法定义微博路由,会生成完整的符合 RESTful 架构的路由,可以对 resource 传参 only 键指定只生成某几个动作的路由,例如:

Route::resource('statuses', 'StatusesController', ['only' => ['store', 'destroy']]);
HTTP 请求 URL 动作 作用
POST /statuses StatusesController@store 创建微博
DELETE /statuses/{status} StatusesController@destroy 删除微博
点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注