进阶 docs.flarum.org 2026-10-15 14:50:53 · 19 阅读

第29章 Flarum 控制台命令

版本:2.x 控制台 除了管理后台之外,Flarum 还提供了一系列控制台命令,帮助你在终端管理论坛。 使用控制台的方法如下: SSH 连接到部署 Flarum 的服务器 进入包含 flarum 文件的目录 通过 php flarum [命令] 运行命令 默认命令 list 列出所有可用的管理命令及使用说明。 help php flarum help [命令名] 显示指定命令的帮助信息。 你也可以使用 --format 选项以其他格式输出帮助内容: php flarum help --format=xml list 若要查看可用命令列表,请使用 list 命令。 info php flarum info 获取 Flarum 核心及已安装扩展的信息。这在调试问题时非常有用,在寻求支持时应提供此信息。 tinker php flarum tinker 打开一个交互式 PHP shell(REPL),此时 Flarum 应用已完全启动。这让你可以直接检查和操作论坛的数据及服务,无需编写临时脚本或翻阅管理界面。它由 PsySH 提供支持。 这主要是维护人员和扩展开发人员在调试、检查数据或执行一次性数据修复时的工具。 来自 Laravel 的用户?Flarum 的 tinker 使用与 Laravel 相同的底层 REPL(PsySH),但它并非 laravel/tinker 包——Flarum 并没有基于完整的 Laravel 框架构建。实际这意味着: 没有 tinker.php 配置文件,Laravel 的门面(Facades)也未注册。如果你出于习惯去调用它们(例如 DB::table(...)),shell 会指引你使用 Flarum 的等价方案——改为通过容器解析服务(resolve(...) 或下列变量)。$db 变量相当于 DB 门面。 短名称模型别名仅适用于 Eloquent 模型(例如 User),并解析为 Flarum 的类,如 Flarum\User\User,而非 App\Models\User。 这是在活动的论坛上执行真实代码。tinker 提供了对数据库和应用的无限制访问权限。没有撤销机制。单行代码即可永久删除数据,且由于写入操作通过 Eloquent 执行,它会触发与正在运行的应用相同的事件、观察者和级联操作——此处的 ->delete() 行为与生产环境完全一致。 在进行任何更改之前,请先备份数据库。 优先执行只读检查;只有在你确定写入操作的影响时才执行写入。 请像直接在生产数据库执行 SQL 一样谨慎对待。 进入 shell 后,以下变量和辅助函数可供使用,以省去输入完整限定类名的麻烦: 可用项 | 说明 $container | Flarum 应用(服务容器)。 $settings | 设置仓储(SettingsRepositoryInterface)。 $db | 数据库连接。 $events | 事件分发器。 $extensions | 扩展管理器。 resolve(...) | 从容器解析其他绑定,例如 resolve(Flarum\Http\UrlGenerator::class)。 此外,Eloquent 模型可以通过短名称引用——用 User 代替 Flarum\User\User。这对核心提供的模型以及已安装扩展提供的模型都有效。 随时在 shell 中运行 flarum 即可重新打印此变量和辅助函数列表,或运行 help 查看 PsySH 自身的命令。 示例 检查论坛数据: >>> User::count();
=> 350

>>> User::find(1)->username;
=> "admin"

>>> Discussion::count();
=> 467
读取并修改配置: >>> $settings->get('forum_title');
=> "My Forum"

>>> $settings->set('forum_title', 'My Renamed Forum');
=> null
检查哪些扩展已启用: >>> count($extensions->getEnabledExtensions());
=> 12

>>> $extensions->isEnabled('flarum-tags');
=> true
对数据库执行原生查询: >>> $db->table('users')->where('is_email_confirmed', false)->count();
=> 6
从容器中解析任意服务: >>> resolve(Flarum\Http\UrlGenerator::class)->to('forum')->base();
=> "https://my-forum.example.com"
输入 exit(或按 Ctrl+D)退出 shell。 运行单个表达式 若不想进入交互式 shell,只想执行一段代码——这在脚本或快速单行命令中非常实用——可通过 --execute(-e)选项传入表达式。执行后,结果将被打印,随后命令退出: $ php flarum tinker --execute "User::count()"
=> 350

$ php flarum tinker -e "\$settings->get('forum_title')"
=> "My Forum"
以这种方式运行时,集合会以紧凑形式输出(例如 Collection {#123})。若需查看其内容,可追加 ->all() 或 ->toArray(): $ php flarum tinker -e "Group::pluck('name_singular', 'id')->all()"

如果代码抛出异常,错误信息会被打印出来,命令会以非零状态码退出,因此可以安全地在脚本中使用。

cache:clear​

php flarum cache:clear

清除 Flarum 后端缓存,包括生成的 js/css、文本格式化缓存和已缓存的翻译。安装或卸载扩展后应运行此命令;遇到问题时,运行它也应该是排查的第一步。

assets:publish​

php flarum assets:publish

发布核心和扩展的静态资源(如编译后的 JS/CSS、bootstrap 图标、logo 等)。当你的资源文件损坏,或者你更换了 flarum-assets 磁盘的文件系统驱动时,这个命令会很有用。

migrate​

php flarum migrate

执行所有未运行的数据库迁移。当新增或更新了会修改数据库的扩展时,应使用此命令。

如果你的 Flarum 部署在共享同一数据库的多台服务器或容器上,部署期间可能有多个实例同时尝试执行迁移,导致除一个之外的所有实例都失败。为避免这种情况,可以传入 --isolated 选项:此时该命令只有在没有其他实例正在运行时才会执行,否则会直接正常退出。前提是所有实例都连接同一个中央缓存服务器。

php flarum migrate --isolated
migrate:reset​

php flarum migrate:reset --extension [extension_id]

重置某个扩展的所有迁移。这主要是扩展开发者的操作,但偶尔你卸载扩展、想从数据库中清除其全部数据时,也可能需要运行它。注意:目标扩展必须处于已安装状态(不一定要启用),此命令才能生效。

schedule:run​

php flarum schedule:run

很多扩展会使用定时任务来周期性地执行操作,例如数据库清理、发布定时草稿、生成站点地图等。如果你的扩展用到了定时任务,应当添加一个 cron 任务来定期运行此命令:

* * * * * cd /path-to-your-flarum-install && php flarum schedule:run >> /dev/null 2>&1

通常不应手动执行此命令。 请注意,部分主机不支持直接编辑 cron 配置。若遇到此情况,请联系你的服务商,以获取有关如何调度 cron 任务的更多信息。 schedule:list​ php flarum schedule:list 此命令会返回已调度的任务列表(更多信息参见 schedule:run)。它有助于确认扩展提供的命令是否已正确注册。但请注意,它无法检查 cron 任务是否成功调度或正在运行。

评论 (0)