企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 伪静态 在`FastAdmin`中我们可以快速的使用伪静态配置来对插件页面的URL进行伪静态处理。 ### 伪静态配置 首先我们需要在`addons/mydemo/config.php`中添加`伪静态`配置项,如下图 ![](https://img.kancloud.cn/8a/70/8a70c4ffb1a3257c8158da312b080ae4_732x347.png) 代码如下: ~~~javascript [ 'name' => 'rewrite', 'title' => '伪静态', 'type' => 'array', 'content' => [], 'value' => [ 'index/index' => '/mydemo/$', //index/index表示插件控制器Index.php中的index方法 'index/test' => '/mydemo/test/[:name]', ], 'rule' => 'required', 'msg' => '', 'tip' => '', 'ok' => '', 'extend' => '', ], ~~~ 通过以上配置,我们在使用`addon_url`函数来生成URL时,返回值将是处理过的URL,例如 ~~~bash $url1 = addon_url('mydemo/index/index'); $url2 = addon_url('mydemo/index/index', [':name'=>'myname', 'id'=>123]); $url3 = addon_url('mydemo/index/index', [':name'=>'myname', 'id'=>123], true, true); ~~~ 上面的结果将返回 ~~~bash /mydemo.html /mydemo/test/myname.html?id=123 http://www.fa.com/mydemo/test/myname.html?id=123 ~~~ 我们的伪静态配置中的`:name`会被自动替换成`addon_url`第二个参数中的`:name`键的值。 服务端我们可以使用`$this->request->param('name')`来获取`:name`对应的值。 > **温馨提示** > 伪静态配置的键值数组中的值伪静态规则必须以`/插件标识/`开头 ### 绑定域名 如果需要让我们的插件支持二级域名,可以在`addons/mydemo/config.php`中添加一项域名配置项,如图: ![](https://img.kancloud.cn/1b/aa/1baa8715e2b6e2218bfda2404382de97_816x365.png) 代码如下: ~~~sql [ 'name' => 'domain', 'title' => '绑定二级域名前缀', 'type' => 'string', 'content' => [], 'value' => '', 'rule' => '', 'msg' => '', 'tip' => '', 'ok' => '', 'extend' => '', ], ~~~ 该配置项默认为空,如果要使用二级域名生效,必须配置`application/config.php`中的`url_domain_deploy`为`true`时才会生效。 注意这里的`value`值仅是域名前缀,比如需要绑定域名`book.mydemo.com`,则这里只需输入`book`即可。 绑定了二级域名后,我们的`addon_url`函数会自动做相应的前缀处理。 ### 自定义路由 如果我们需要为特殊的URL规则添加伪静态匹配,可以通过修改`application/extra/route.php`,添加伪静态规则,如下: ~~~scss //addon: 应用插件标识 //controller: 控制器 //action: 请求方法 \think\Route::rule('/city', "\\think\\addons\\Route@execute?addon=mydemo&controller=city&action=index"); ~~~ 因为我们是开发插件,我们建议是通过行为事件,在`Mydemo.php`中添加`appInit`方法,如下: ~~~php /** * app 初始化 */ public function appInit() { \think\Route::rule('/city', "\\think\\addons\\Route@execute?addon=mydemo&controller=city&action=index"); } ~~~ 来实现插件自定义路由的规则。