乌鸦嘴文档 乌鸦嘴文档
乌鸦嘴社区 (opens new window)
乌鸦嘴社区 (opens new window)
  • 入门

    • 介绍
    • 安装
    • v1.x版本升级指南
    • 版本升级须知
    • 快速开始
    • 开发前必读
    • 主题与颜色
    • 静态资源加载
    • 视图与自定义页面
    • 多应用 (多后台)
    • JS组件
    • 常见问题汇总
      • Laravel Octane
    • 数据列表

    • 数据表单

    • 数据详情

    • 模型树

    • 数据仓库

    • 动作

    • 多语言

    • 开发扩展

    • 页面组件

    • 区块

    • 动作以及表单相应

    • 权限控制

    • 菜单

    • 帮助函数

    • 开发工具

    • 自定义登陆

    • 自定义头部导航

    • 更新日志

    目录

    常见问题汇总

    # 常见问题汇总

    # 1.如何设置语言为简体中文?

    打开配置文件config/app.php,设置locale参数的值为zh_CN。

    # 2.Laravel7时间显示为UTC格式

    这个是Laravel7升级后带来的坑,原因请参考日期序列化 (opens new window)。

    在本项目中解决这个问题很简单,只需在Model中引入Dcat\Admin\Traits\HasDateTimeFormatter这个trait即可。

    <?php
    
    namespace App\Models;
    
    use Dcat\Admin\Traits\HasDateTimeFormatter;
    use Illuminate\Database\Eloquent\Model;
    
    class MyModel extends Model
    {
         use HasDateTimeFormatter;
    }
    

    # 3.表单保存时报错Array to string conversion

    出现这个问题是因为表单提交的值最后转换成了array类型,而MySQL是不支持直接存储array类型数据的,在dcat-admin中可以用以下方式对数据格式进行转换

    $form->multipleSelect('user_id')->saving(function ($v) {
        // 转为 , 隔开的字符串
        return implode(',', $v);
    });
    

    当然,也可以通过model的修改器去转化字段的值,这方面内容可以参考laravel文档,这里就不再赘述。

    提示

    更优雅的转化值方法,可参考 Dcat Admin 教程 - 如何优雅地更改表单值的数据类型? (opens new window)

    # 4.如何从laravel-admin迁移到dcat-admin?

    Dcat Admin 教程 - 如何从 Laravel admin 迁移到 dcat admin? (opens new window)

    # 5.重写登陆页面和登陆逻辑

    方式一,重写登陆控制器方法:

    默认的登陆控制器用的是App\Admin\AuthController这个类,可以通过配置参数admin.auth.controller进行修改

    <?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)
        {
            ...
        }
    
        ...
    }
    
    

    方式二,覆写路由:

    在路由文件app/Admin/routes.php中,覆盖掉登陆页面和登陆逻辑的路由,即可实现自定义的功能

    Route::group([
        'prefix'        => config('admin.prefix'),
        'namespace'     => Admin::controllerNamespace(),
        'middleware'    => ['web', 'admin'],
    ], function (Router $router) {
    
        $router->get('auth/login', 'AuthController@getLogin');
        $router->post('auth/login', 'AuthController@postLogin');
        
    });
    

    在自定义的路由器AuthController中的getLogin、postLogin方法里分别实现自己的登陆页面和登陆逻辑。

    # 6.更新新版本后出现异常

    如果遇到更新之后,部分组件不能正常使用,那有可能是dcat-admin自带的静态资源有更新了,需要运行命令php artisan admin:publish --force来重新发布前端资源,发布之后不要忘记清理浏览器缓存.

    # 7.文件上传失败或无法访问?

    如果你发现无法上传文件,那么通常有几下几点原因:

    1. Laravel文件上传配置不正确,请参考文档图片/文件上传 (opens new window)。如果你不了解laravel文件上传功能,请阅读文档Laravel - 文件存储 (opens new window)
    2. 文件过大,需要调整php.ini的upload_max_filesize参数
    3. 文件上传目录没有写权限
    4. php没有安装或没有开启fileinfo扩展
    5. 检查php.ini的upload_tim_dir参数设置是否正常

    如果文件上传成功了,却无法正常访问,那么可能是.env配置文件中的APP_URL参数没有设置正确。

    # 8.关于前端资源加载问题

    Dcat Admin是支持前端资源按需加载的,在需要用到某个组件的时候再引入前端资源即可,开发者无需担心安装组件过多影响页面加载速度。

    只有那种需要在全局页面引入的资源,才需要在app/Admin/bootstrap.php或ServiceProvider::boot方法中引入:

    Admin::css('path/to/your/css');
    Admin::js('path/to/your/js');
    

    # 9.为何配置了角色和权限,依然提示无权访问?

    这个原因可能是由于权限的URL路径配置错误导致的,正确的包含增删改查功能的URL配置应该是auth/users*这样的,如果配置成了auth/users/*,那么就会提示无权访问。

    提示

    另外标签表单填写自定义URL有两种方法:一种是选中后按删除键进行更改;另一种是填写后按空格键 + 回车键。

    # 10.为何没有权限的菜单不会自动隐藏?

    这个问题是因为没有给菜单绑定权限或者角色,给想要无权不显示的菜单绑定权限或者角色即可。

    # 11.项目使用HTTPS之后无法登陆

    需要把配置文件的admin.https参数的值设置为true

    # 12.$.get(xxx) 没有反应

    Dcat Admin使用的是jQuery3.x,$.get方法在jQuery3.x中已经被废弃,请使用$.ajax代替

    # 13.上传的图片经常莫名其妙自动删除?

    出现这个问题的原因很可能是因为Model中设置了图片相关字段的访问器,如

    class User extend Model
    {
        public function getAvatarAttribute()
        {
            return Storage::disk('admin')->url($this->avatar);
        }
    }
    

    这种情况下会出现自动删除已上传图片的情况,解决方法也很简单,把访问器改成自定义方法即可

    class User extend Model
    {
        public function getAvatar()
        {
            return Storage::disk('admin')->url($this->avatar);
        }
    }
    

    ###14.前后台session发生冲突

    从2.0的版本之后 admin.session 中间件不再默认启用,如果您的应用同时有前台和后台,则需要开启 admin.session 中间件,否则会造成前后台 session 冲突问题。

    把配置参数 admin.route.enable_session_middleware 的值设置为 true 即可开启

        'route' => [
            'domain' => env('ADMIN_ROUTE_DOMAIN'),
    
            'prefix' => env('ADMIN_ROUTE_PREFIX', 'admin'),
    
            'namespace' => 'App\\Admin\\Controllers',
    
            'middleware' => ['web', 'admin'],
            
            // 开启 admin.session 中间件
            'enable_session_middleware' => true,
        ],
    

    # 15.图片防盗链

    图片请求默认会去掉 referer 字段,如果有防盗链要求,可以在配置文件(config/admin.php)中设置:

     "disable_no_referrer_meta" => true
    
    JS组件
    Laravel Octane

    ← JS组件 Laravel Octane→

    Theme by Vdoing | Copyright © 2020-2022 wyz.xyz 宁ICP备15001739号-5
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×