常见问题
如果你在使用FastAdmin开发框架的过程中遇到问题,请到问答社区提问: https://ask.fastadmin.net
在FastAdmin中如何开启调试模式?
开启调试模式的方法有两种:
- 修改站点目录下的
.env文件,修改其中app_debug的值为true即可(如没有该文件请忽略,如有该文件,框架会优先使用该文件配置)。 - 打开
application/config.php,找到app_debug,将它的值置为true即可。
为什么在调试模式下功能正常,但在生产环境下功能失效
如果你有修改了框架核心的JS文件或者修改了核心样式文件,需要使用命令重新压缩打包JS和CSS后才会在生产环境下生效,具体请参考:https://doc.fastadmin.net/doc/162.html
为什么在外网访问后台速度非常慢
如果你在外网开启了调试模式,因为在调试模式下加载的文件非常多,访问速度会非常慢,请在外网或生产环境下关闭调试模式。如果有更高的响应要求,建议采用CDN部署静态资源。部署方式请参考:#如何将静态资源采用CDN方式部署到第三方云存储
如何启用后台管理多级菜单功能
FastAdmin从1.0.0.20180513_beta版本开始新增了多级菜单功能,开发者可以很方便的在配置文件中修改是否开启多级菜单功能,找到application/config.php文件最下方有个multiplenav配置,默认是false,如果需要启用,请将multiplenav置为true即可。
如果启用了多级菜单后,菜单规则中的第一级将作为一级菜单显示在顶部。我们可以在权限管理->菜单规则中额外添加一级菜单,然后再重新规划我们的菜单。
温馨提示
FastAdmin从1.3.0版本开始已经支持后台个性化布局,后台管理员登录后直接在后台管理右上角修改对应的布局后即可实时生效,无需修改配置文件。
插件管理配置了错误的伪静态前台无法访问时如何操作
如果在后台配置某一插件的伪静态错误时,导致前台完全无法打开时,你可以尝试使用http://www.example.com/随机字符.php 进行登录后台,登录后再重新配置伪静态即可。
如果连后台登录也报错,可以尝试修改application/extra/addons.php,移除键名为route对应的值,修改为[],然后登录后台修改正确的伪静态,再清除缓存即可。
如何在生成CRUD时生成回收站功能
FastAdmin从1.0.0.20190301_beta版本开始已经支持自动生成回收站功能,如果需要生成回收站功能,请确保你的FastAdmin版本,其次确保你的数据表中存在deletetime这个字段,默认值必须为null,不能为0,只需保证存在此字段,CRUD在生成时会自动生成回收站相关的前后端代码和文件。
如何在控制器或模型中获取当前登录的管理员或登录用户信息
在FastAdmin所提供的基类Frontend、Backend、Api中都有提供获取当前管理员或登录用户的信息方法
在后台管理的控制器中可以通过$this->auth->id来获取管理员ID,$this->auth->字段名获取管理员的其它信息,如果需要在后台的Model中获取当前登录的管理员ID,可以通过两种方式获取:
\think\Session::get('admin');$auth = \app\admin\library\Auth::instance();在前台或API的控制器中可以通过$this->auth->id来获取当前登录会员ID,$this->auth->字段名获取登录会员的其它信息,如果需要在前台的Model中获取当前登录的用户信息,可以通过以下的方式获取:
//获取Auth对象
$auth = \app\common\library\Auth::instance();
//获取会员模型
$user = $auth->getUser();安装后提示控制器不存在:E或控制器不存在:N
出现这种情况一般是由于Web服务器的PATH_INFO未配置正确,导致服务器接收到了错误的PATH_INFO值,请检查你的PATH_INFO并修复后再重试
FastAdmin的数据库SQL文件在哪里
FastAdmin在安装时会自动创建数据库和数据表,免除了你手动创建数据库和导入数据库的烦恼。
FastAdmin的数据库安装文件保存在 application/admin/command/Install/fastadmin.sql
如何修改后台默认皮肤
为了进一步提升加载速度,后台默认启用了绿色主题的皮肤,如何修改其它皮肤呢?
从1.3.0版本开始,已经支持在后台配置自定义皮肤(仅对当前浏览器生效),无需要修改配置文件。
从1.2.0版本开始,已经支持通过配置文件修改后台默认皮肤,可以直接修改application/config.php中的adminskin值来实现快速换肤功能,adminskin支持的值有
skin-blue/skin-black/skin-purple/skin-green/skin-red/skin-yellow
skin-blue-light/skin-black-light/skin-purple-light/skin-green-light/skin-red-light/skin-yellow-light
skin-black-blue/skin-black-purple/skin-black-green/skin-black-red/skin-black-yellow为什么前台自己创建的控制器提示你没有权限访问
这是由于控制器的基类你肯定继承的是Frontend,Frontend基类有鉴权判断,有以下两种办法可以尝试
- 添加控制器的属性
$noNeedRight=["*"],表示无需再做鉴权 - 后台会员规则中添加相应的规则,再给对应的会员组赋予相应的权限即可
为什么后台给管理员所在组分配了权限,管理员仍然提示没有权限访问
如果是你自己添加的控制器,可以使用一键生成菜单命令(php think menu -c 控制器名)来生成菜单,如果你是手动添加的规则菜单,权限规则必须细化到控制器的方法才可以。
php think install报不是内部或外部命令
这是由于php.exe文件所在目录未加入到PATH环境变量导致的
找到php.exe文件所在的目录,将该目录加入到系统PATH环境变量中后,重启CMD即可解决
如果你找不到php.exe,可以参考FastAdmin开发环境配置系列教程
php think install报command not found
这是由于在Linux环境下未找到php的脚本程序
有两种解决办法,首先尝试使用which php找到php所在的位置。
- 找到php脚本程序所在的目录,加入到PATH环境变量中去,使用
export PATH=$PATH:php脚本程序所在目录 - 找到php脚本程序文件,使用
ln -s php脚本程序文件 /usr/bin/php
安装后只能访问网站首页,其它页均报404 page not found错误
这是由于你的服务器伪静态没有生效或错误导致的。
如果你使用宝塔面板,请直接在宝塔面板后台->网站->伪静态 中选择ThinkPHP5的伪静态规则即可。
如果你使用的是 lnmp.org 的一键安装LNMP环境,请查阅 https://lnmp.org/faq/lnmp-vhost-add-howto.html#rewrite 的伪静态配置。
如果你使用的是phpStudy,建议参考视频安装教程中的伪静态配置:https://www.fastadmin.net/video/install.html
如果你是自行安装的Nginx,建议将虚拟主机的root绑定运行目录至public目录
例如:
server {
listen 80;
server_name www.fa.com *.fa.com;
root "C:/phpstudy/WWW/fastadmin/public";
location / {
index index.html index.htm index.php;
#主要是这一段一定要确保存在
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
#结束
#autoindex on;
}
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}安装后只能访问网站首页,其它页面均报no input file specified错误
这是由于你的服务器伪静态没有生效或错误导致的,如果你使用宝塔面板,请直接在宝塔面板后台->网站->伪静态 中选择ThinkPHP5的伪静态规则即可。
这种情况一般在Apache下伪静态不工作的情况下出现,
首先确保已经启用Apache的伪静态,确保目录已经配置好权限,如下面的Directory配置
<VirtualHost *:80>
DocumentRoot "/Project/fastadmin/public"
ServerName fa.com
ServerAlias fa.com *.fa.com
<Directory "/Project/fastadmin">
AllowOverride All
Options Indexes FollowSymLinks
Require all granted
</Directory>
</VirtualHost>其次伪静态规则在Apache fastcgi模式下会导致No input file specified.,未指定输入文件。
请修改public目录下的.htaccess文件
默认的
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]修改成
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]composer install时无法下载package
这是由于composer默认配置是境外的源,如遇网络故障则会导致无法下载
推荐使用国内的镜像源,有以下两种启用方法
// 打开命令行窗口并执行如下命令:
composer config -g repos.packagist composer https://mirrors.tencent.com/composer/// 打开命令行窗口,进入你的项目的根目录(也就是 composer.json 文件所在目录),执行如下命令:
composer config repos.packagist composer https://mirrors.tencent.com/composer/如何修改或禁用左侧菜单栏的角标
FastAdmin后台左侧菜单栏有彩色的小角标,这一般用于通知和提醒操作,在后台开发时是非常方便的一个小功能,如何修改和禁用它呢?
找到/application/admin/controller/Index.php中的index方法,其中有一段
$menulist = $this->auth->getSidebar([
'dashboard' => 'hot',
'auth' => ['new', 'red', 'badge'],
'auth/admin' => 12,
'auth/rule' => 4,
'general' => ['18', 'purple'],
]);数组的键名是对应的左侧菜单栏的相对链接
数组的键值是需要显示的文字或数字,可以传字符串或数组
说明
- 如果是字符串,则角标的颜色是按照
'red', 'green', 'yellow', 'blue', 'teal', 'orange', 'purple'的方式进行循环的。 - 如果是数组,这三个值分别表示:[显示的文字, 颜色,展现方式(
badge或label)]
如果需要删除这个小角标,则可以直接到数组置为空即可
在JS端同样可以进行相应的操作,在JS中对应需要刷新角标的地方使用以下方法即可添加或删除
top.window.Backend.api.sidebar({
'auth/admin':44
});top.window.Backend.api.sidebar({
'auth/admin':0
});后台上传文件时提示HTTP Error.(code:-200)错误
首先可以尝试下清空浏览器缓存后再刷新重试
其次可以使用谷歌浏览器的开发者工具,按F12,切换到Network,看具体的上传文件时的错误信息。
在Windows下如何压缩打包JS和CSS
在FastAdmin中压缩打包JS和CSS文件需要NodeJS的支持
在Windows下需要手动配置Node的可执行文件,请修改application/admin/command/Min.php中$nodeExec的值
如你的Node可执行文件是C:/Program Files/nodejs/node.exe,则请配置$nodeExec = '"C:/Program Files/nodejs/node.exe"';
提示你所浏览的页面暂时无法访问
如果我们在FastAdmin开发过程中遇到此错误,说明我们application/config.php中的app_debug是关闭的,必须开启app_debug为true才可以显示出详细的错误信息。如果开启app_debug仍然显示不出详细错误,请确保php.ini中的display_error为开启状态。
提示未知的数据格式或网络错误
很多时候都有可能遇到提示未知的数据格式或网络错误这个提示,产生这个错误的原因一般来说都是服务端报错,导致返回的数据不是JSON格式或直接未返回,如下图
准备工作:首先确保你的FastAdmin开启了调试模式application/config.php中的app_debug置为true
两种定位错误的方法:
- 使用Chrome浏览器,打开开发者工具,选中
Network(网络)选项卡,刷新一下页面或重新请求一次,定位到我们请求的URL,点击然后在Preview即可看到错误信息 - 直接查看
runtime/log目录下的错误日志
修复错误后再重试即可
FastAdmin建议运行在PHP7.4及以上版本,因此如果提示网络错误请检查你的PHP是否低于该版本
如何将静态资源(/assets/目录下文件)采用CDN方式部署?
FastAdmin可以将框架静态的资源部署到云存储或CDN,可大大的加快网站的访问,默认FastAdmin框架的静态资源是不采用CDN部署的,如果需要启用,需要修改以下两个文件的配置
- 修改
application/extra/site.php中cdnurl的值为你CDN的地址 - 修改
application/config.php中__CDN__的值为你CDN的地址
然后请将你的静态资源public/assets文件夹同步至你的CDN。
如果采用了静态资源CDN部署,在后台插件管理中对插件执行安装、禁用、启用、卸载后都需要将public/assets/addons/目录和public/assets/js/addons.js文件刷新缓存或同步更新到CDN。
为何后台管理总是一登录或每隔几秒或几分钟就自动退出?
为了后台安全,新版本默认开启了后台IP变动检测,如果你需要关闭此功能,可以修改application/config.php,将loginip_check置为false即可。
温馨提示
如果你使用了CDN、分布式部署或负载均衡,也有可能导致获取IP地址不正确,从而导致一登录就自动退出,请参考https://doc.fastadmin.net/doc/faq.html#toc-50
为何页面头部总是输出一个多余的●或?
一般出现这种情况都是由于你使用了Windows自带编辑器编辑了某个配置文件或模板,导致文件本身的编码变成了utf8-bom格式,这时你需要排查你的项目的所有文件。如果你使用PHPStorm进行开发,可以在项目目录根路径上点击右键,点击Remove BOM来移除bom头,将文件编码变为utf8(新版本PHPStorm请选中文件夹后,点击菜单中的文件->文件属性->移除BOM进行移除)。
后台管理默认首页如何修改?
后台管理后台默认是控制台首页,如需修改,请在后台->常规管理->系统配置中,将后台固定页修改为你的控制器方法的链接即可,这里注意使用相对链接即可,注意链接无需包含?ref=addtabs。
安装应用插件时报无法打开zip文件、无法解压ZIP、未知的数据格式(code:0)、插件下载失败、你所浏览的页面暂时无法访问、Error等错误时如何排查?
- 首先在后台->
插件管理->会员信息是否登录已购买应用插件的账号。 - 其次检查服务器,在线安装和离线安装均只支持中国内地服务器安装,其它地区无法进行在线安装或离线安装。
- 检查下PHP版本,目前最新版本只支持
7.4(FastAdmin 1.3.4+),请检查你使用的PHP版本。 - 请检查你服务器的网络能否正常请求外网(公网),无法请求公网环境是无法安装应用插件。
- 如果有开启了宝塔的防火墙请先尝试关闭后安装,建议本地安装后再迁移到生产服务器。
- 检查站点下目录
runtime是否有读写权限,部分插件安装时还需要给application和public目录读写权限,安装完应用插件后务必移除application和public目录的写权限。 - 如果排除服务器问题,请开启调试后重试看具体错误原因,开启调试的方法:https://ask.fastadmin.net/question/985.html
- 请确定是否以超级管理员的身份登录的后台。
表单提交保存数据时提示SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'content' at row 1?
这是由于系统在检测到POST提交时会记录提交的参数信息,如果提交的POST数据过大,会导致日志表的content字段溢出,此时我们需要修改fa_admin_log表的content字段,将字段类型修改为longtext类型即可。
后台表格列表选择导出到Excel并打开后无法显示图片该如何操作?
这是由于上传配置中的cdnurl为空,导致导出的图片没有截图域名前缀,需要手动修改application/extra/upload.php中的cdnurl值,将cdnurl的值修改为你的站点地址即可,例如:https://www.example.com,注意不能以/结尾。
提交的富文本内容被过滤导致首行空格丢失该如何操作?
有些时候我们在前台提交的富文本内容被过滤了,比如富文本首行的缩进丢失,这是由于FastAdmin的基类是有开启全局过滤。
修改方法一:
修改application/common/controller/Frontend.php移除trim过滤限制
修改application/common/controller/Backend.php移除trim过滤限制
修改application/common/controller/Api.php移除trim过滤限制
特别注意strip_tags,htmlspecialchars不建议移除,移除后会导致跨站安全问题。
修改方法二:
不修改框架核心文件,仅在控制器中接收数据时单独处理,如:
$content = $this->request->post('content', '', 'xss_clean');后台插件管理安装插件时提示插件已经存在?
这种情况常出现在安装后又卸载插件,而卸载插件时由于插件目录中有文件被打开或被其它软件占用,导致卸载插件时目录无法清除干净,此时再次安装插件时就会出现该情况,请尝试做好备份,手动清除addons/插件标识文件夹后重试,插件标识可以从插件URL中查询到,如知识付费问答社区:https://www.fastadmin.net/store/ask.html 它的插件标识则是ask。
如何调整插件伪静态的优先级?
在FastAdmin中插件中配置的伪静态优先级默认是按照字母来排序的,如果我们需要修改插件伪静态的优先级,可以手动配置application/extra/addons.php,修改其中的priority,添加应用插件标识,放在前面则优先匹配,如
'priority' => ["third", "cms", "ask"],这里表示优先配置third,然后才是cms和ask。
最后在后台插件管理右上角清除插件缓存即可。
在后台系统配置中配置了cdn地址而导致后台管理无法登录时该如何还原?
后台常规管理->系统配置的cdn地址仅限用于静态资源采用CDN部署时才需要配置,如果静态资源未部署CDN,而此时在后台系统配置中配置了cdn地址会导致后台样式丢失,且后台无法登录,此时我们需要手动修改application/extra/site.php中的cdnurl,将它的值修改为空即可。
温馨提示
FastAdmin 从1.3.x版本开始已经在后台移除该配置。
打开页面报sql_mode=only_full_group_by错误时该怎么办?
这是由于你的Mysql配置中设置了only_full_group_by导致的错误,需要你修改你的Mysql配置,首先需要找到你的Mysql的my.cnf,找到其中的mysqld,修改sql_mode,移除ONLY_FULL_GROUP_BY,如
[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"然后重启Mysql服务即可。
为何后台常规管理系统配置中没有添加配置项的功能?
从1.3.0+版本开始,后台系统配置中添加配置项的功能只在开发环境才可使用,如需添加配置,需要开启调试模式后,再刷新页面即可。
为何后台表格拖拽排序配置后仍然为灰色,无法进行拖拽排序?
如果启用固定列,此时不支持拖拽排序,所以会为灰色,如需启用拖拽排序,只能禁用固定列,找到页面对应的JS,移除代码中的fixedColumns:true即可。
为何多文件(多图片)预览时无法正常显示?
目前多文件(多图片)中的文件地址暂不支持存在,,会导致图片错误,请参考:https://doc.fastadmin.net/doc/177.html#toc-5 温馨提示中的说明。
提示“不允许上传的文件类型”如何处理?
打开 application/extra/upload.php,修改mimetype,加入需要上传类型的文件后缀。
后台登录时验证码不显示?
首先请检查:application/config.php是否设置login_captcha,为true时才会启用验证码功能。
其次请参考:https://ask.fastadmin.net/question/985.html 排查下图片是否有报错信息,如果状态码为500或404,请开启调试后查看具体错误原因。如果接口状态码为200,说明图片接口正常,请检查下是否在Windows下使用自带记事本编辑了代码文件(或修改配置文件),导致编辑的文件存在utf8 bom头,请移除utf8 bom头,使用utf8编码后重试。
请检查PHP环境GD库是否正确安装。
如果以上方法试了都不行,建议开启调试模式后调试下vendor/topthink/think-captcha/src/Captcha.php中的entry方法排查具体错误原因。
管理员登录时提示请于1天后再尝试登录?
这是由于FastAdmin框架默认开启了登录失败重试次数限制,当失败次数超过10次时,需要1天后才可以重新登录,你可以手动登录数据库修改数据库表fa_admin中对应管理员的loginfailure为0,然后重试登录即可。
上传文件时提示未上传文件或超出服务器上传限制?
这种情况一般出现在本地上传时出现,通常情况下是由于上传的文件超出了服务器配置的限制,导致服务端无法正常获取到数据,请参考问题进行修改服务器配置:https://ask.fastadmin.net/question/27680.html
如何关闭前台会员中心?
打开 application/config.php,找到底部fastadmin配置,修改usercenter值为false即可。
如何开启前台会员中心手机注册验证码?
首先在插件市场安装一款短信插件并配置相关的参数,然后打开 application/config.php,找到底部fastadmin配置,修改user_register_captcha值为mobile即可。
如何开启前台会员中心邮箱注册验证码?
打开 application/config.php,找到底部fastadmin配置,修改user_register_captcha值为email即可。
为什么页面始终有响应Cache-Control: no-store, no-cache, must-revalidate?
这是由于你在页面中使用了session,或视图模板中有调用{:token()}输出token(此时也会使用到session),因使用了session的页面,会自动添加响应头Cache-Control: no-store, no-cache, must-revalidate。
后台添加或编辑时提示Forbidden错误提示?
首先请检查runtime/log中的日志信息,检查是否有错误信息产生,如果有错误信息请根据错误信息进行处理,如果没有错误,请检查是否使用了宝塔面板,请检查是否宝塔面板中的防火墙进行了拦截。
为什么使用 join 后再使用排序操作出现 SQLSTATE 1267 Illegal mix of collations 问题?
这是因为数据表的字符集不一致导致的,请将数据表统一一下,比如都使用 utf8mb4_general_ci
FastAdmin1.3.4和1.3.5版本中Bootstrap-Select组件异常如何处理?
这是由于FastAdmin框架中引入了新版本Bootstrap-Select组件导致冲突,目前建议你做好备份后,下载https://cdn.fastadmin.net/uploads/2023/03/24/d9988d44627f5407ab4d3027b9b19b87.zip
解压后将其中的public文件夹覆盖到站点目录进行合并,然后清浏览器缓存即可。
配置使用了https协议但图片地址和上传地址是http协议?
首先如果有安装使用云存储插件,请检查云存储插件中配置的CDN地址和上传接口地址是否使用了http
其次如果我们使用了CDN,也有可能导致该问题发生,此时建议你检查你使用的CDN的配置在回源时是否支持HTTP_X_FORWARDED_PROTO,如果支持请检查该值是否为https,如果不支持HTTP_X_FORWARDED_PROTO,请检查你的CDN是否支持自定义回源参数,如果支持自定义回源参数,请自定义一个回源参数,然后修改application/config.php,添加一项https_agent_name配置,https_agent_name的值为你自定义回源参数即可。
如果无法自定义回源参数,请参考下方的问题2:生成的URL链接不正确(协议不正确)")的解决办法修改配置。
服务器使用了负载均衡或CDN后造成获取客户端IP为内网IP以及生成URL链接不正确时该如何处理?
如果服务器使用了负载均衡或CDN后造成获取客户端IP为内网IP以及生成URL链接不正确时可按以下方式修改配置。
问题1:获取客户端IP为内网IP
因为在ThinkPHP5框架中获取客户端IP是通过REMOTE_ADDR参数来获取的,如果此时我们使用了负载均衡或CDN后会造成客户端IP为负载均衡或CDN服务器的IP地址,此时我们可以咨询我们使用的云服务商或参考云服务商提供的相关文档,获取负载均衡或CDN传递真实IP的参数名,然后修改application/config.php中的http_agent_ip值即可。
问题2:生成的URL链接不正确(协议不正确)
因为ThinkPHP5框架中使用url函数生成URL路径时,优先使用HTTPS/REQUEST_SCHEME/SERVER_PORT/HTTP_X_FORWARDED_PROTO来判断是否是SSL请求,从而生成URL地址。
如果服务器使用了负载均衡或CDN后,由于服务器无法获取到这几个参数判断,从而导致生成URL地址错误,主要表现在生成的URL地址本应该是https://开头,但却生成了http://开头。
解决办法分两种:
一种是需要修改application/config.php,添加一个is_https的参数,值设定为true即可,这种解决方案会导致不管是否是SSL请求,都会强制生成https://开头的URL。
另一种就是添加转发参数,通常情况下负载均衡或CDN都会有转发或回源参数的配置,添加以下转发(回源)参数,让服务器识别到SSL请求即可。
| 参数名 | 参数值 |
|---|---|
| HTTP_X_FORWARDED_PROTO | https |
问题3:生成的URL链接不正确(域名不正确/端口号丢失)
因为ThinkPHP5框架中使用url函数生成URL路径时,优先使用HTTP_X_REAL_HOST/HTTP_HOST来生成URL地址。
如果服务器使用了负载均衡或CDN后,由于服务器无法获取到这几个参数判断,从而导致生成URL地址错误
解决办法:
添加转发参数,通常情况下负载均衡或CDN都会有转发或回源参数的配置,添加以下转发(回源)参数,让服务器识别到正确请求即可。
| 参数名 | 参数值 |
|---|---|
| HTTP_X_REAL_HOST | 你的站点域名 |
如何自定义404页面显示模板?
在FastAdmin框架中如果使用了throw new \think\exception\HttpException(404, '页面不存在');或abort(404,'页面不存在');抛出了404错误,默认情况下会提示你所浏览的页面暂时无法访问,如果我们希望自定义404的错误页面,可以修改application/config.php配置文件,找到http_exception_template 的配置文件,如果不存在,需要手动添加配置项,配置如下:
'http_exception_template' => [
// 定义404错误的重定向页面地址
404 => APP_PATH . 'common/view/tpl/404.tpl',
],然后在对应的application/common/view/tpl/目录下创建404.tpl模板即可。
温馨提示
1、该配置仅在生产环境下生效,如果开启了调试模式仍然会提示详细的错误信息。
2、默认修改application/config.php会对application目录下的所有模块起作用,如index、admin、api,如果希望仅对index模块起作用,可以在application/index目录下创建一个config.php配置并做以上的配置。
如何将插件管理配置的菜单添加到左侧菜单导航?
默认情况下插件管理配置的菜单都是需要通过插件管理->配置进行管理,如果需要在左侧菜单中添加相应的快捷链接,可以通过权限管理->菜单规则->添加,添加中规则使用addon/config/name/插件标识的菜单即可。
后台单独绑定域名后导致插件系统前台地址报错?
默认前后台使用同一个域名时前台插件系统不会报错,如果后台单独绑定了域名,导致插件前台URL地址拼接错误,此时框架无法得知你前台插件域名主站的域名,此时需要手动修改application/admin/config.php,添加上如下配置:
'view_replace_str' => [
'__PUBLIC__' => 'https://www.example.com',
],其中https://www.example.com为你主站的站点地址。
搜索引擎收录带有/index.php的页面时该如何处理?
通常情况下我们请求的页面都是不带/index.php,如果希望只保留不带/index.php的页面,可以通过修改application/common/behavior/Common.php中的moduleInit方法,在该方法内开头处添加如下代码即可
if (stripos($request->url(), "/index.php") === 0) {
$url = str_replace("/index.php", "", $request->url());
$url = $url ?: "/";
header("HTTP/1.1 301 Moved Permanently");
header("Location: " . $url);
exit;
}微信PC端内打开网页或小程序报错?
如果在微信PC端内打开调试模式后报Undefined offset: 1 in /www/wwwroot/www.example.com/application/common/view/tpl/think_exception.tpl或Undefined offset: 1 in /www/wwwroot/www.example.com/thinkphp/library/think/Lang.php,可参考以下方法进行修复:application/common/view/tpl/think_exception.tpl大概第22行
$langSet = strtolower($matches[1]);修改为
$langSet = strtolower($matches[1] ?? '');thinkphp/library/think/Lang.php大概第204行
$langSet = strtolower($matches[1]);修改为:
$langSet = strtolower($matches[1] ?? '');使用旧版本FastAdmin的如果不需要多语言的可以关闭多语言application/config.php修改为'lang_switch_on' => false
这是由于新版本微信电脑端HTTP_ACCEPT_LANGUAGE获取为*而导致该错误。
参考:
https://gitee.com/fastadminnet/fastadmin/blob/1.x/application/common/view/tpl/think_exception.tpl
为什么应用插件的菜单手动修改后再升级应用插件后菜单被还原了?
这是由于FastAdmin应用插件系统菜单升级功能导致,如果不希望菜单升级覆盖原有的菜单,可通过修改application/common/library/Menu.php中的menuUpdate方法,将大概第196行的
$menu = $oldMenu[$data['name']];修改为
$menu = $oldMenu[$data['name']];
unset($menu['title']);即可。
需谨慎
温馨提示:这种修改将导致无法和最新版本应用插件的菜单标题同步。
为什么图片启用防盗链后,后台图片无法加载?
这是由于FastAdmin框架后台设定了referer为never,也就是不发送携带referer参数,你可以自行修改application/admin/view/common/meta.html,找到大概第5行的
<meta name="referrer" content="never">移除该行即可,但通常不建议移除,这样会导致我们的列表中的图片携带有referer信息,如果一定要移除,建议配合浏览器安全策略插件:https://www.fastadmin.net/store/csp.html 来限制只加载指定域名下图片的加载。
修改插件配置或右上角清缓存提示failed to open stream: Permission denied该如何处理?
如果我们在插件管理修改配置或右上角清缓存时提示file_put_contents(/www/wwwroot/www.example.com/xxx/xxx): failed to open stream: Permission denied,请检查对应的文件是否有写权限,修改配置或清缓存需要更新该文件,开发或配置阶段建议给对应文件添加相应的写权限,正式上线后建议移除写权限。
请确保对应文件所属的用户是否为www(通常情况下),如果所属用户为root,也会导致该错误,请修改对应文件的归属权,请参考使用chown www:www /www/wwwroot/www.example.com/xxx/xxx,其中/www/wwwroot/www.example.com/xxx/xxx为报错的文件。
后台登录时一直提交令牌数据无效该如何排查?
请参考以下几点进行排查:
1、停留在登录页时间过长
2、开启了新的登录页,原登录页token会失效
3、当前登录页有其它请求导致刷新了token(如图片地址为空或使用了当前页URL),建议使用网页开发者工具进行排查当前页面是否被请求了两次或多次
4、检查服务器磁盘是否有剩余空间,磁盘空间满也会导致该错误
5、检查是否使用了分布式部署,在分布式部署时务必保证将Session存储至数据库或Redis
6、使用浏览器无痕模式测试,排除浏览器扩展影响。
7、使用手机蜂窝网络测试,排除受网络影响。
后台插件安装时报类型错误: Return value of PhpZip\Util\DateTimeConverter::msDosToUnix() must be of the type int, bool returned如何处理?
这是由于第三方组件PHP-ZIP在解压文件时获取文件最后修改时间时,在Win32位系统下整型数据溢出导致,修复方法是做好备份后手动修改以下两处:vendor/nelexa/zip/src/Util/DateTimeConverter.php第59行,将public static function msDosToUnix(int $dosTime): int修改为public static function msDosToUnix(int $dosTime)
vendor/nelexa/zip/src/Model/ZipEntry.php第636行,将public function getTime(): int修改为public function getTime()
也就是移除对应位置两个方法结尾的: int
修改后重试。
插件安装后部分JS报错404?
这是由于/public/assets/js/addons.js缓存导致,请按以下方法进行排查修复:
1、点击后台右上角清除缓存->一键清除缓存
2、在插件管理,找到对应报错的插件,禁用然后重新启用,然后再点击后台右上角清除缓存->一键清除缓存
3、如果1和2步骤均尝试了均不行,请检查下/public/assets/js/addons.js文件中是否存在报错插件的相关代码,如果没有相关代码,可能没有报错插件的相关代码,请检查/public/assets/js/addons.js文件是否有读写权限,插件在禁用或启用时需要更新该文件,如果没有相应的权限,也会导致部分JS报错404。
如何动态修改云存储上传插件后缀或文件大小
首先需要根据上传模式找到需要修改的文件控制器:
| 上传模式 | 控制器路径 |
|---|---|
| 直传模式 | application/admin/controller/控制器名.php |
| 中转模式 | application/admin/controller/控制器名.php 和 addons/插件标识/controller/Index.php |
在相应控制器中找到_initialize()方法,在调用父类的_initialize()之前追加以下代码:
set_addon_config('插件标识', ['savekey' => '/uploads/avatar/{filemd5}{.suffix}', 'maxsize' => '2M'], false);这里修改了savekey的值,也就相当于修改了上传的目录,这样适用于所有的第三方存储插件临时修改配置。如果是中转模式,修改addons/插件标识/controller/Index.php时,你需要自行添加条件判断来源页面来动态修改,不然会影响所有中转模式下的文件上传。
云存储插件标识目前FastAdmin框架有以下几个标识:
| 标识 | 名称 |
|---|---|
| alioss | 阿里OSS云存储 |
| bos | 百度云存储 |
| cos | 腾讯云存储 |
| hwobs | 华为云存储 |
| qiniu | 七牛云存储 |
| ucloud | UCloud云存储 |
| upyun | 又拍云存储 |
为什么后台导出列表数据时第一列或操作列丢失?
默认不导出第一列(checkbox)与操作(operate)列,如果你在开发时移除了第一列默认的checkbox或最后一列,则会在导出时丢失相应列。解决办法:
在控制器对应的JS的表格初始化时传入需要忽略的列或设置ignoreColumn为空,如:
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
sortName: '',
exportOptions: {
ignoreColumn: [] //ignoreColumn可以传入列索引或字段名称
}
// 其它配置保持不变
...
});后台列表页如何启用导入功能?
后台管理列表页的导入功能默认禁用,如需调用导入功能,请参考文档:https://ask.fastadmin.net/article/540.html
Token默认有效时长在哪里配置?
application/common/library/Auth.php中$keeptime的值。
为什么后台插件管理无法加载插件市场插件只能管理本地插件?
由于目前插件市场绝大多数应用插件均无法适配1.0.0版本,FastAdmin插件市场已于2022年停止了对FastAdmin框架1.0.0版本的支持,请升级FastAdmin框架。
为什么插件管理选择应用插件安装时只有最近5个版本可选择?
由于应用插件存在频繁更新,为了接口加载响应及体验,接口在响应时只会返回最近的5个版本。