Phabricator自定义Gantt应用路由失效问题及开发教程咨询
你已经基于uiexample搭好了基础应用框架,但路由没跑起来,大概率是漏掉了Phabricator应用注册和缓存刷新这些关键环节,按下面的步骤来排查:
1. 给你的应用创建扩展注册文件
Phabricator不会自动扫描到新应用,得在phabricator/src/extensions/目录下新增一个扩展文件,比如PhabricatorGanttApplicationExtension.php,内容如下:
<?php final class PhabricatorGanttApplicationExtension extends PhabricatorApplicationExtension { public function getApplicationName() { return 'gantt'; } public function getApplicationClass() { return 'PhabricatorGanttApplication'; } }
这个文件相当于给你的应用办了个“入场证”,告诉Phabricator系统有这么个应用存在。
2. 补全路由对应的控制器类
你在getRoutes里指定了PhabricatorGanttRenderController,但得确保这个控制器真的存在,而且放在正确的目录(建议放在phabricator/src/applications/gantt/controller/下)。给你个最基础的控制器示例:
<?php final class PhabricatorGanttRenderController extends PhabricatorController { public function handleRequest(AphrontRequest $request) { // 先写个简单的响应测试路由是否生效 $page = new AphrontWebpageResponse(); $page->setContent('<h2>终于看到Gantt页面啦!</h2>'); return $page; } }
控制器必须继承PhabricatorController,并且实现handleRequest方法,这是Phabricator控制器的标准要求。
3. 强制清除Phabricator缓存
Phabricator会把应用配置、路由这些信息缓存起来,修改后必须清缓存才能生效。在项目根目录运行:
./bin/cache purge --all
如果只想清应用相关的缓存,也可以用更精准的命令:
./bin/cache purge --app gantt
4. 验证应用是否被正确加载
运行下面的命令,看看你的Gantt应用有没有出现在已加载应用列表里:
./bin/app list
如果列表里找不到gantt,那说明注册文件没写对或者放错位置了,得回头检查。
5. 再核对下路由定义
你的路由写法本身没毛病,但可以再确认下:
- 根路径
/gantt/会直接触发控制器 /gantt/view/{xxx}/这种带参数的路径,参数可以通过$request->getURIData('class')在控制器里获取
Phabricator官方没有专门的“入门教程”,但自带的资源足够你上手:
- 看源码里的
phabricator/docs/ApplicationDevelopmentGuide.md,这是官方写的应用开发指南,从应用结构、路由到视图都有讲 - 直接啃
uiexample应用的源码,你已经用它当模板了,对比它的目录结构、扩展注册、控制器写法,几乎能覆盖所有基础场景 - 用
./bin/app help查看应用相关的命令说明,Phabricator的命令行工具能帮你做很多自动化的事
内容的提问来源于stack exchange,提问作者Radosław Andraszyk

