常见问题汇总
<h1>常见问题汇总</h1>
<h3>1.如何设置语言为简体中文?</h3>
<p>打开配置文件<code>config/app.php</code>,设置<code>locale</code>参数的值为<code>zh_CN</code>。</p>
<h3>2.Laravel7时间显示为UTC格式</h3>
<p>这个是<code>Laravel7</code>升级后带来的坑,原因请参考<a href="https://learnku.com/docs/laravel/7.x/upgrade/7445#date-serialization">日期序列化</a>。</p>
<p>在本项目中解决这个问题很简单,只需在<code>Model</code>中引入<code>Dcat\Admin\Traits\HasDateTimeFormatter</code>这个<code>trait</code>即可。</p>
<pre><code class="language-php">&lt;?php
namespace App\Models;
use Dcat\Admin\Traits\HasDateTimeFormatter;
use Illuminate\Database\Eloquent\Model;
class MyModel extends Model
{
use HasDateTimeFormatter;
}</code></pre>
<h3>3.表单保存时报错<code>Array to string conversion</code></h3>
<p>出现这个问题是因为表单提交的值最后转换成了<code>array</code>类型,而<code>MySQL</code>是不支持直接存储<code>array</code>类型数据的,在<code>dcat-admin</code>中可以用以下方式对数据格式进行转换</p>
<pre><code class="language-php">$form-&gt;multipleSelect('user_id')-&gt;saving(function ($v) {
// 转为 , 隔开的字符串
return implode(',', $v);
});</code></pre>
<p>当然,也可以通过<code>model</code>的<strong>修改器</strong>去转化字段的值,这方面内容可以参考<code>laravel</code>文档,这里就不再赘述。</p>
<p>> {tip} 更优雅的转化值方法,可参考 <a href="https://learnku.com/articles/44386">Dcat Admin 教程 - 如何优雅地更改表单值的数据类型?</a></p>
<h3>4.如何从laravel-admin迁移到dcat-admin?</h3>
<p><a href="https://learnku.com/articles/44235">Dcat Admin 教程 - 如何从 Laravel admin 迁移到 dcat admin?</a></p>
<h3>5.重写登陆页面和登陆逻辑</h3>
<p>方式一,重写登陆控制器方法:</p>
<p>默认的登陆控制器用的是<code>App\Admin\AuthController</code>这个类,可以通过配置参数<code>admin.auth.controller</code>进行修改</p>
<pre><code class="language-php">&lt;?php
namespace App\Admin\Controllers;
use Dcat\Admin\Controllers\AuthController as BaseAuthController;
class AuthController extends BaseAuthController
{
// 自定义登陆view模板
protected $view = 'admin.login';
// 重写登陆页面逻辑
public function getLogin(Content $content)
{
...
}
...
}
</code></pre>
<p>方式二,覆写路由:</p>
<p>在路由文件<code>app/Admin/routes.php</code>中,覆盖掉登陆页面和登陆逻辑的路由,即可实现自定义的功能</p>
<pre><code class="language-php">Route::group([
'prefix' =&gt; config('admin.prefix'),
'namespace' =&gt; Admin::controllerNamespace(),
'middleware' =&gt; ['web', 'admin'],
], function (Router $router) {
$router-&gt;get('auth/login', 'AuthController@getLogin');
$router-&gt;post('auth/login', 'AuthController@postLogin');
});</code></pre>
<p>在自定义的路由器AuthController中的<code>getLogin</code>、<code>postLogin</code>方法里分别实现自己的登陆页面和登陆逻辑。</p>
<h3>6.更新新版本后出现异常</h3>
<p>如果遇到更新之后,部分组件不能正常使用,那有可能是<code>dcat-admin</code>自带的静态资源有更新了,需要运行命令<code>php artisan admin:publish --force</code>来重新发布前端资源,发布之后不要忘记清理浏览器缓存.</p>
<h3>7.文件上传失败或无法访问?</h3>
<p>如果你发现无法上传文件,那么通常有几下几点原因:</p>
<ol>
<li><code>Laravel</code>文件上传配置不正确,请参考文档<a href="https://learnku.com/docs/dcat-admin/1.x/picture-file-upload/8106">图片/文件上传</a>。如果你不了解<code>laravel</code>文件上传功能,请阅读文档<a href="https://learnku.com/docs/laravel/7.x/filesystem/7485">Laravel - 文件存储</a></li>
<li>文件过大,需要调整<code>php.ini</code>的<code>upload_max_filesize</code>参数</li>
<li>文件上传目录没有写权限</li>
<li><code>php</code>没有安装或没有开启<code>fileinfo</code>扩展</li>
<li>检查<code>php.ini</code>的<code>upload_tim_dir</code>参数设置是否正常</li>
</ol>
<p>如果文件上传成功了,却无法正常访问,那么可能是<code>.env</code>配置文件中的<code>APP_URL</code>参数没有设置正确。</p>
<h3>8.关于前端资源加载问题</h3>
<p><code>Dcat Admin</code>是支持前端资源按需加载的,在需要用到某个组件的时候再引入前端资源即可,开发者无需担心安装组件过多影响页面加载速度。</p>
<p>只有那种需要在全局页面引入的资源,才需要在<code>app/Admin/bootstrap.php</code>或<code>ServiceProvider::boot</code>方法中引入:</p>
<pre><code class="language-php">Admin::css('path/to/your/css');
Admin::js('path/to/your/js');</code></pre>
<h3>9.为何配置了角色和权限,依然提示无权访问?</h3>
<p>这个原因可能是由于权限的<code>URL</code>路径配置错误导致的,正确的包含增删改查功能的<code>URL</code>配置应该是<code>auth/users*</code>这样的,如果配置成了<code>auth/users/*</code>,那么就会提示无权访问。</p>
<p>> {tip} 另外标签表单填写自定义URL有两种方法:一种是选中后按<code>删除键</code>进行更改;另一种是填写后按<code>空格键</code> + <code>回车键</code>。</p>
<h3>10.为何没有权限的菜单不会自动隐藏?</h3>
<p>这个问题是因为没有给菜单绑定权限或者角色,给想要无权不显示的菜单绑定权限或者角色即可。</p>
<h3>11.项目使用HTTPS之后无法登陆</h3>
<p>需要把配置文件的<code>admin.https</code>参数的值设置为<code>true</code></p>
<h3>12.$.get(xxx) 没有反应</h3>
<p><code>Dcat Admin</code>使用的是<code>jQuery3.x</code>,<code>$.get</code>方法在<code>jQuery3.x</code>中已经被废弃,请使用<code>$.ajax</code>代替</p>
<h3>13.上传的图片经常莫名其妙自动删除?</h3>
<p>出现这个问题的原因很可能是因为<code>Model</code>中设置了图片相关字段的访问器,如</p>
<pre><code class="language-php">class User extend Model
{
public function getAvatarAttribute()
{
return Storage::disk('admin')-&gt;url($this-&gt;avatar);
}
}</code></pre>
<p>这种情况下会出现自动删除已上传图片的情况,解决方法也很简单,把访问器改成自定义方法即可</p>
<pre><code class="language-php">class User extend Model
{
public function getAvatar()
{
return Storage::disk('admin')-&gt;url($this-&gt;avatar);
}
}</code></pre>
<h3>14.前后台session发生冲突</h3>
<p>从<code>2.0</code>的版本之后 <code>admin.session</code> 中间件不再默认启用,如果您的应用同时有前台和后台,则需要开启 <code>admin.session</code> 中间件,否则会造成前后台 <code>session</code> 冲突问题。</p>
<p>把配置参数 <code>admin.route.enable_session_middleware</code> 的值设置为 <code>true</code> 即可开启</p>
<pre><code class="language-php"> 'route' =&gt; [
'domain' =&gt; env('ADMIN_ROUTE_DOMAIN'),
'prefix' =&gt; env('ADMIN_ROUTE_PREFIX', 'admin'),
'namespace' =&gt; 'App\\Admin\\Controllers',
'middleware' =&gt; ['web', 'admin'],
// 开启 admin.session 中间件
'enable_session_middleware' =&gt; true,
],</code></pre>
<h3>15.图片防盗链</h3>
<p>图片请求默认会去掉 <code>referer</code> 字段,如果有防盗链要求,可以在配置文件(<code>config/admin.php</code>)中设置:</p>
<pre><code> &quot;disable_no_referrer_meta&quot; =&gt; true</code></pre>