2018年10月20日 星期六

laravel-admin 使用心得

使用laravel-admin快速搭建後台模版
PHP >=7.0.0
Laravel >= 5.5.0

安裝最新版的 laravel 5.7
$ composer create-project --prefer-dist laravel/laravel blog

安裝laravel-admin
$ composer require encore/laravel-admin

列出你裝了哪些packages
$ composer show -i

發佈assets 和 config
$ php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"

配置 .env 的db連線
檢查mysql的auto_increment_increment ,避免id兩個一跳造成 php artisan admin:install 報錯 // Menu::find(2)->roles()->save(Role::first()); // add role to menu. 查不到admin_menu.id = 2的資料,因為id跳到3
mysql> SHOW VARIABLES LIKE '%auto_increment_increment%';
如果是2,要改my.cnf改成1

然後你可以在 config/admin.php 配置 laravel-admin的路徑、db連線、table名字
跑以下命令完成安裝
$ php artisan admin:install

預設帳號:admin,密碼:admin

開管理員出現錯誤:
http://laravel.admin/admin/auth/users/create
Disk [admin] not configured, please add a disk config in `config/filesystems.php`
https://github.com/z-song/laravel-admin/issues/1327
http://laravel-admin.org/docs/#/en/model-form-upload?id=upload-to-local
config/filesystems.php 新增
'disks' => [
    ... ,

    'admin' => [
        'driver' => 'local',
        'root' => public_path('uploads'),
        'visibility' => 'public',
        'url' => env('APP_URL').'/uploads', // 要改.env的 APP_URL为正确访问的网址
        'url' => admin_asset('uploads'), // 避免{{ Admin::user()->avatar }}破圖
    ],
],
ps. laravel-admin會破圖的views是放在 vendor/encore/laravel-admin/resources/views/partials/sidebar.blade.php

為什麼 {{ Admin::user()->avatar }} 是取出完整網址,但db只存對應路徑?
vendor/encore/laravel-admin/src/Auth/Database/Administrator.php
Administrator的 getAvatarAttribute() 把它改了
return admin_asset('/vendor/laravel-admin/AdminLTE/dist/img/user2-160x160.jpg'); // 沒上傳頭像返回預設圖,預設圖不破圖

admin_asset() 如何運作?
在vendor/encore/laravel-admin/src/helpers.php 的 admin_asset()這裡

不要在config裡面用helpers
https://github.com/laravel/framework/issues/7671
這樣會造成 composer dumpautoload報錯
$ composer dumpautoload
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover

In UrlGenerator.php line 111:

  Argument 2 passed to Illuminate\Routing\UrlGenerator::__construct() must be
   an instance of Illuminate\Http\Request, null given, called in /var/wwwroot
  /project/vendor/laravel/framework/src/Illuminate/Routing/RoutingServicePro
  vider.php on line 61

Script @php artisan package:discover handling the post-autoload-dump event returned with error code 1


參考資料:
https://github.com/z-song/laravel-admin