跳转到主要内容

简介

Laravel Folio 是一个基于页面的路由器,只需放置 Blade 文件即可定义路由。 与传统的以 routes/web.php 为中心的定义方式不同,它能够将文件系统的结构直接映射到 URL。 对于以内容为中心的网站,或希望按页面快速添加页面的后台管理系统尤其有效。 在需要精细 HTTP 控制的场景(如 API)中,建议与常规路由搭配使用。

安装

首先通过 Composer 安装 Folio。
composer require laravel/folio
php artisan folio:install
folio:install 会注册 Folio 的服务提供者。 默认情况下,resources/views/pages/ 为页面目录。 如果需要区分多个页面目录或基础 URI,请在服务提供者的 boot 中设置 Folio::path()uri()
use Laravel\Folio\Folio;

Folio::path(resource_path('views/pages/guest'))->uri('/');

Folio::path(resource_path('views/pages/admin'))
    ->uri('/admin');

创建路由

Folio 会从挂载目录下 Blade 文件的文件名自动生成 URL。
resources/views/pages/schedule.blade.php -> /schedule
php artisan folio:list

嵌套路由

嵌套目录时,URL 也会以同样的结构嵌套。
php artisan folio:page user/profile
# pages/user/profile.blade.php -> /user/profile

索引路由

index.blade.php 会映射到该目录的根路径。
php artisan folio:page index
# pages/index.blade.php -> /

php artisan folio:page users/index
# pages/users/index.blade.php -> /users

路由参数

在文件名中使用 [] 即可接收 URL 段。
php artisan folio:page "users/[id]"
# pages/users/[id].blade.php -> /users/1
<div>User {{ $id }}</div>
要接收多个段,请使用 ...
php artisan folio:page "users/[...ids]"
# pages/users/[...ids].blade.php -> /users/1/2/3
@foreach ($ids as $id)
    <li>User {{ $id }}</li>
@endforeach

路由模型绑定

[User].blade.php 这样使用模型名,即可自动解析出模型实例。
php artisan folio:page "users/[User]"
# pages/users/[User].blade.php -> /users/1
<div>User {{ $user->id }}</div>
如果要包含软删除的模型,请在页面中调用 withTrashed()
<?php

use function Laravel\Folio\withTrashed;

withTrashed();
写作 [Post:slug].blade.php 时,可以使用 id 之外的键(例如 slug)来解析模型。

中间件

如果只对特定页面应用中间件,请在页面模板内使用 middleware()
<?php

use function Laravel\Folio\middleware;

middleware(['auth', 'verified']);
要一次性对多个页面应用中间件,请使用 Folio::path(...)->middleware()
<?php

use Laravel\Folio\Folio;

Folio::path(resource_path('views/pages'))->middleware([
    'admin/*' => ['auth', 'verified'],
]);

命名路由

也可以通过 name() 为 Folio 页面命名。
<?php

use function Laravel\Folio\name;

name('users.index');
在诸如 users/[User].blade.php 这样的单个页面中定义 name('users.show') 后,就可以通过 route('users.show', ['user' => $user]) 生成带参数的 URL。
设置好路由名之后,可用 route() 辅助函数生成 URL。
route('users.index');
route('users.show', ['user' => $user]);

文件与 URL 的对应关系

与传统路由的对比

特性常规路由Folio
路由定义routes/web.php通过文件名自动生成
控制器需要(或使用闭包)不需要(直接在 Blade 中处理)
适用场景API、SPA、复杂的 HTTP 控制内容网站、后台管理
即便使用 Folio,也可以通过 php artisan route:cache 启用路由缓存,从而在生产环境中优化性能。
最后修改于 2026年7月13日