常见问题汇总

下面列举了一下常见问题

为什么这个方法/功能不生效呢?

大概率是版本问题,参考版本升级来升级你的版本。

覆写内置视图

如果有需要自己修改view,但是不方便直接修改laravel-admin的情况,可以用下面的办法解决

复制vendor/encore/laravel-admin/views到项目的resources/views/admin,然后在app/Admin/bootstrap.php文件中加入代码:


// 覆盖`admin`命名空间下的视图
app('view')->prependNamespace('admin', resource_path('views/admin'));

这样就用resources/views/admin下的视图覆盖了laravel-admin的内置视图。

在laravel-admin每个新版本发布的时候, 内置视图都有可能会变更,所以如果你覆写了laravel-admin的视图,在更新laravel-admin版本的时候, 很有可能会出现视图方面的问题,这个需要你对照修改过的视图文件和内置视图自行修改解决。

怎么设置语言呢?

完成安装之后,默认语言为英文(en),如果要使用中文,打开config/app.php,将locale设置为zh-CN即可。

如果上面修改之后,表单的验证信息还是英文的,那么可以安装Laravel-lang来切换成中文。

关于扩展自定义组件

laravel-admin默认引用了大量前端资源,如果有网络问题或者有不需要使用的组件,可以参考form组件管理将其移除。

关于富文本编辑器,由于静态资源包文件普遍太大,所以laravel-admin默认通过cdn的方式引用ckeditor,建议大家根据自己的需求扩展编辑器,自行配置。

关于前端资源问题

如果需要使用自己的前端文件,可以在app/Admin/bootstrap.php中引入:

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

重写登录页面和登录逻辑

在路由文件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中的getLoginpostLogin方法里分别实现自己的登录页面和登录逻辑。

参考控制器文件AuthController.php,视图文件login.blade.php

更新静态资源

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

页面乱码问题

在下载或者预览文件的时候,可能会遇到页面内容全部乱码的情况,出现这个问题的原因,是因为Laravel-admin默认使用pjax来加载页面,它会读取要下载或者预览的内容来渲染到当前页面的内容区域。

解决办法是打开新页面来下载或者预览文件:

<a href="http://xxxx" target="_blank">下载文件</a>

a标签上添加target="_blank", 用新页面打开避免使用pjax加载页面。

前后台session冲突

如果网站前台和管理后台在同一个Laravel项目中,并且在一个域名下,登录的时候可能会遇到前后台session冲突的问题,在版本v1.6.10之后修复了这个问题,先更新到v1.6.10以上,然后在config/admin.phproute.middleware上加上一个中间件admin.session即可

    'route' => [

        'middleware' => ['web', 'admin', 'admin.session'],

    ],

如果后台使用子域名作为入口比如admin.example.com, 和www.example.com下的其它项目session冲突,那么可以修改config/session.php里面的cookie为其它名称(默认为laravel_session)。