代碼已放在 github 上漱竖,歡迎參考和提出 issue:laravel-quick-start github地址
環(huán)境+包
一共需要安裝的包
// 不需要手動(dòng)引入服務(wù)提供者
"arcanedev/log-viewer": "^4.3",
// 不需要手動(dòng)引入服務(wù)提供者
"barryvdh/laravel-debugbar": "^2.4",
// 不需要手動(dòng)引入服務(wù)提供者
"encore/laravel-admin": "1.4.*",
// 不需要手動(dòng)引入服務(wù)提供者
"laracasts/flash": "^3.0",
// 不需要手動(dòng)引入服務(wù)提供者
"predis/predis": "^1.1",
// 不需要手動(dòng)引入服務(wù)提供者
"prettus/l5-repository": "^2.6",
// 不需要手動(dòng)引入服務(wù)提供者
"zgldh/qiniu-laravel-storage": "^0.7.0"
// 不需要手動(dòng)引入服務(wù)提供者
"spatie/laravel-backup": "^4.18",
// 不需要手動(dòng)引入服務(wù)提供者
"intervention/image": "^2.4",
// 不需要手動(dòng)引入服務(wù)提供者
"maatwebsite/excel": "^2.1",
// 直接安裝
"doctrine/dbal": "^2.5",
// 直接安裝
"spatie/eloquent-sortable": "^3.3",
/**
* tian 引入 `axdlee/laravel-config-writer`【生成配置文件】-可以不要
*/
Axdlee\Config\ConfigServiceProvider::class,
"axdlee/laravel-config-writer": "^1.0",
"hassankhan/config": "^0.10.0",
初始化項(xiàng)目
laravel new 項(xiàng)目名
修改時(shí)區(qū)
config/app.php
里面修改時(shí)區(qū)
'timezone' => 'UTC',
改為
'timezone' => 'PRC',
將 session
存在 redis
中
安裝包
composer require predis/predis
在
config\database.php
中的redis
添加
// tian add session saved to redis
'session' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 1,
],
- 在
config\session.php
中修改
// tian add session saved to redis
// 'connection' => null,
'connection' => 'session',
- 在
.env
里面修改
# tian add session saved to redis
SESSION_DRIVER=redis
引入自定義類和函數(shù)
引入自定義類
在 app
目錄下新建文件夾 Classes
本來是需要在 composer.json
里面引入, 但是因?yàn)槭窃?app
目錄下面 psr-4
了所以不需要
"autoload": {
"classmap": [
"database",
"app/Classes"http:// 這行, 引入自定義類
],
"psr-4": {
"App\\": "app/"
},
"files": [
"app/helpers.php"http:// 這行, 引入自定義函數(shù)
]
},
引入自定義函數(shù)
在 app
目錄下新建文件 helpers.php
使用 laravel-admin
安裝
composer require encore/laravel-admin
然后運(yùn)行下面的命令來發(fā)布資源:
php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"
自定義(重載) 修改默認(rèn)的 9 張表, 在
config/admin.php
里的database
的表名加上laravel_
前綴.防止執(zhí)行數(shù)據(jù)遷移報(bào)錯(cuò), 先解決字符長度問題
安裝
php artisan admin:install
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table
Migrating: 2016_01_04_173148_create_admin_tables
Migrated: 2016_01_04_173148_create_admin_tables
Admin directory was created: \app\Admin
HomeController file was created: \app\Admin/Controllers/HomeController.php
ExampleController file was created: \app\Admin/Controllers/ExampleController.php
Bootstrap file was created: \app\Admin/bootstrap.php
Routes file was created: \app\Admin/routes.php
- 配置圖片圖片上傳, 配置
config/filesystems.php
'admin' => [
'driver' => 'local',
'root' => public_path('uploads'),
'visibility' => 'public',
'url' => env('APP_URL').'/uploads',
],
- 自定義視圖目錄
復(fù)制 vendor/encore/laravel-admin/resources/views
到項(xiàng)目的 resources/views/laravel-admin
禽篱,然后在
app/Admin/bootstrap.php
文件中加入代碼:app('view')->prependNamespace('admin', resource_path('views/laravel-admin'));
- 自定義語言包
復(fù)制 vendor/encore/laravel-admin/lang
到項(xiàng)目的 resources/lang/laravel-admin
,然后在 app/Admin/bootstrap.php
文件中加入代碼:app('translator')->addNamespace('admin', resource_path('lang/laravel-admin'));
/**
* 忽略 `map`, `editor` 控件
*/
Encore\Admin\Form::forget(['map', 'editor']);
/**
* 修改命名空間
*/
// tian 修改 `laravel-admin` view, 便于修改, 這樣就不需要?jiǎng)?`laravel-admin` 的源碼馍惹。復(fù)制 `vendor/encore/laravel-admin/views` 到項(xiàng)目的 `resources/views/laravel-admin`
app('view')->prependNamespace('admin', resource_path('views/laravel-admin'));
// tian 修改 `laravel-admin` 的語言包, 復(fù)制 `vendor/encore/laravel-admin/lang` 到項(xiàng)目的 `resources/lang/admin`躺率。如果將系統(tǒng)語言locale設(shè)置為 `zh-cn`, 可以將 `resources/lang/admin` 目錄下的 `zh_CN` 目錄重命名為 `zh-cn` 即可
app('translator')->addNamespace('admin', resource_path('lang/laravel-admin'));
laravel-admin
要做的修改:
自定義(重載)
修改默認(rèn)的 9
張表
在 config/admin.php
里的 database
的表名加上 laravel_
前綴
關(guān)于自定義視圖
復(fù)制 vendor/encore/laravel-admin/resources/views
到項(xiàng)目的 resources/views/laravel-admin
,然后在 app/Admin/bootstrap.php
文件中加入代碼:
app('view')->prependNamespace('admin', resource_path('views/laravel-admin'));
這樣就用 resources/views/admin
下的視圖覆蓋了 laravel-admin
的視圖万矾,要注意的問題是悼吱,更新 laravel-admin
的時(shí)候,如果遇到視圖方面的問題良狈,需要重新復(fù)制 vendor/encore/laravel-admin/views
到項(xiàng)目的 resources/views/admin
中后添,注意備份原來已經(jīng)修改過的視圖。
設(shè)置語言
完成安裝之后薪丁,默認(rèn)語言為英文 (en)
遇西,如果要使用中文,打開 config/app.php
严嗜,將 locale
設(shè)置為 zh-CN
即可努溃。
自定義語言
如果需要修改 laravel-admin
的語言包,可以用下面的方式解決, 復(fù)制 vendor/encore/laravel-admin/lang
到項(xiàng)目的 resources/lang/admin
阻问,然后在 app/Admin/bootstrap.php
文件中加入代碼:
app('translator')->addNamespace('admin', resource_path('lang/admin'));
如果將系統(tǒng)語言 locale
設(shè)置為 zh-CN
梧税,可以將 resources/lang/admin
目錄下的 zh_CN
目錄重命名為 zh-CN
即可,更新 laravel-admin
的時(shí)候,要做相應(yīng)修改第队。
更新靜態(tài)資源
如果遇到更新之后,部分組件不能正常使用,那有可能是 laravel-admin
自帶的靜態(tài)資源有更新了,所以需要手動(dòng)去用 vendor/encore/laravel-admin/assets
的靜態(tài)資源覆蓋掉 public/packages
目錄下的靜態(tài)資源文件,覆蓋完成之后不要忘記清理瀏覽器緩存.
自定義登陸頁面和登陸邏輯
在路由文件 app/Admin/routes.php
中哮塞,覆蓋掉登陸頁面和登陸邏輯的路由,即可實(shí)現(xiàn)自定義的功能
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
方法里分別實(shí)現(xiàn)自己的登陸頁面和登陸邏輯忆畅。
使用日志包 arcanedev/log-viewer
composer require arcanedev/log-viewer
自動(dòng)引入服務(wù)提供者, 所以不需要添加
providers
php artisan log-viewer:publish
__ _
/ / ___ __ _/\ /(_) _____ _____ _ __
/ / / _ \ / _` \ \ / / |/ _ \ \ /\ / / _ \ '__|
/ /__| (_) | (_| |\ V /| | __/\ V V / __/ |
\____/\___/ \__, | \_/ |_|\___| \_/\_/ \___|_|
|___/
Version 4.5.1 - Created by ARCANEDEV?
Copied File [\vendor\arcanedev\log-viewer\config\log-viewer.php] To [\config\log
-viewer.php]
Copied Directory [\vendor\arcanedev\log-viewer\resources\views] To [\resources\v
iews\vendor\log-viewer]
Copied Directory [\vendor\arcanedev\log-viewer\resources\lang] To [\resources\la
ng\vendor\log-viewer]
Publishing complete.
- 修改日志級(jí)別
修改 .env
中的 LOG_CHANNEL=stack
改為為 daily
laravel5.5及之前:
'log' => env('APP_LOG', 'single'),
'log_level' => env('APP_LOG_LEVEL', 'debug'),
- 修改語言
將語言修改為中文,在 config/log-viewer.php
中的 locale='auto'
修改為 locale='zh'
- 修改路由和中間件
'route' => [
'enabled' => true,
'attributes' => [
// 'prefix' => 'log-viewer',
// 修改路由前綴
'prefix' => 'admin/log-viewer',
// 'middleware' => env('ARCANEDEV_LOGVIEWER_MIDDLEWARE') ? explode(',', env('ARCANEDEV_LOGVIEWER_MIDDLEWARE')) : null,
// 修改中間件, 或者直接在 `.env` 里面改為:
ARCANEDEV_LOGVIEWER_MIDDLEWARE=web,admin,admin.bootstrap,admin.pjax,admin.log,admin.bootstrap,admin.permission
'middleware' => ['web', 'admin', 'admin.bootstrap', 'admin.pjax', 'admin.log', 'admin.bootstrap', 'admin.permission'],
],
],
- 訪問
原鏈接: http://127.0.0.1:8000/log-viewer
改路由前綴后: http://127.0.0.1:8000/admin/log-viewer
使用調(diào)試包 barryvdh/laravel-debugbar
composer require barryvdh/laravel-debugbar
Barryvdh\Debugbar\ServiceProvider::class,
【不需要了, 自動(dòng)引入服務(wù)提供者】'Debugbar' => Barryvdh\Debugbar\Facade::class,
【不需要alias
, 自動(dòng)引入了】php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"
Copied File [\vendor\barryvdh\laravel-debugbar\config\debugbar.php] To [\config\
debugbar.php]
Publishing complete.
- 非調(diào)試環(huán)境下,關(guān)閉debug,將
.env=true
改為.env=false
,默認(rèn)debug是開啟狀態(tài).
數(shù)據(jù)庫備份 spatie/laravel-backup
composer require spatie/laravel-backup
自動(dòng)引入服務(wù)提供者
php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"
Copied File [\vendor\spatie\laravel-backup\config\backup.php] To [\config\backup
.php]
Copied Directory [\vendor\spatie\laravel-backup\resources\lang] To [\resources\l
ang\vendor\backup]
Publishing complete.
用這個(gè)包, 需要安裝
composer require guzzlehttp/guzzle
, 因?yàn)樾枰玫秸?qǐng)求如果要備份到 自定義目錄 可以進(jìn)行一下配置
app/config/filesystems.php:
'disks' => [
// 添加laravel-backup備份文件目錄
'backup' => [
'driver' => 'local',
'root' => env('BACKUP_PATH'),
'visibility' => 'public',
],
],
app/config/laravel-backup.php:
'destination' => [
/*
* The disk names on which the backups will be stored.
*/
'disks' => [
// 'local',
'backup',
//'admin',
],
],
- 命令說明
如果要備份到特定磁盤而不是所有磁盤,請(qǐng)運(yùn)行:
php artisan backup:run --only-to-disk=name-of-your-disk
備份文件和數(shù)據(jù)庫:
php artisan backup:run
只備份db:
php artisan backup:run --only-db
只備份文件:
php artisan backup:run --only-files
清理備份:
php artisan backup:clean
查看所有受監(jiān)視的目標(biāo)文件系統(tǒng)的狀態(tài):
php artisan backup:list
'monitorBackups' => [
[
'name' => config('app.name'),
'disks' => ['local'],
'newestBackupsShouldNotBeOlderThanDays' => 1,
'storageUsedMayNotBeHigherThanMegabytes' => 5000,
],
/*
[
'name' => 'name of the second app',
'disks' => ['local', 's3'],
'newestBackupsShouldNotBeOlderThanDays' => 1,
'storageUsedMayNotBeHigherThanMegabytes' => 5000,
],
*/
],
引入自定義路由-(因?yàn)榇a是自動(dòng)吐出的, 路由是分目錄的)
加載 routes/web
文件夾下的路由
在 app/Providers/RouteServiceProvider.php
中
map()
方法中,添加以下代碼:
// tian add `mapCustomRoutes`
$this->mapCustomRoutes();
新增以下方法:
/**
* tian add
* Define the "Custom" routes for the application.
*
* These routes all receive session state, CSRF protection, etc.
*
* @return void
*/
protected function mapCustomRoutes()
{
/**
* 加載 routes/web 文件夾下的路由
*/
Route::group([
// `laravel-admin` 有的中間件 'admin.auth', 'admin.pjax', 'admin.log', 'admin.bootstrap', 'admin.permission'
'middleware' => ['web', 'admin', 'admin.bootstrap', 'admin.pjax', 'admin.log', 'admin.bootstrap', 'admin.permission'],
'namespace' => 'App\Http\Controllers',
'prefix' => 'admin',
], function ($router) {
$routePath = dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . 'routes' . DIRECTORY_SEPARATOR . 'web';
$this->getFilePath($routePath);
});
}
/**
* [getFilePath 遞歸遍歷文件]
* @param string $path [description]
* @return [type] [description]
*/
protected function getFilePath($path = '.')
{
// opendir()返回一個(gè)目錄句柄, 失敗返回false
$current_dir = opendir($path);
// readdir()返回打開目錄句柄中的一個(gè)條目
while (($file = readdir($current_dir)) !== false) {
// 構(gòu)建子目錄路徑
$sub_dir = $path . DIRECTORY_SEPARATOR . $file;
if ($file == '.' || $file == '..') {
continue;
// 如果是目錄,進(jìn)行遞歸
} else if (is_dir($sub_dir)) {
$this->getFilePath($sub_dir);
} else {
if (is_dir($sub_dir)) {
$this->getFilePath($sub_dir);
}
if (is_file($sub_dir)) {
require_once $sub_dir;
}
// 如果是文件,直接輸出
// $path = substr($path, strrpos($path, 'routes'));
// echo base_path($path . DIRECTORY_SEPARATOR . $file) . '<br />';
// require base_path($path . DIRECTORY_SEPARATOR . $file);
}
}
}
安裝數(shù)據(jù)庫抽象層 prettus/l5-repository
【對(duì)模型的一層封裝】
composer require prettus/l5-repository
自動(dòng)引入服務(wù)提供者
php artisan vendor:publish --provider "Prettus\Repository\Providers\RepositoryServiceProvider"
Copied File [\vendor\prettus\l5-repository\src\resources\config\repository.php]
To [\config\repository.php]
Publishing complete.
安裝提示包 laracasts/flash
【提示框】
composer require laracasts/flash
需要引入服務(wù)提供者【現(xiàn)在不需要了, laravel5.5后自動(dòng)引入服務(wù)提供者】
需要在
config/app.php
里的aliases
加入Facades
【不需要alias
, 自動(dòng)引入了】
將提示信息可以顯示在 laravel-admin
框架中
在 resources\views\laravel-admin\content.blade.php
里的 <section class="content">
下添加如下代碼:
{{-- tian add flash --}}
@include('flash::message')
doctrine/dbal【使用 migration
作為數(shù)據(jù)庫的版本控制工具尸执,當(dāng)需要對(duì)已存在的數(shù)據(jù)表作更改家凯,需要額外引入 doctrine/dbal
擴(kuò)展∪缡В】
composer require doctrine/dbal
安裝圖像處理包 intervention/image
composer require intervention/image
自動(dòng)引入服務(wù)提供者
php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravel5"
Copied File [\vendor\intervention\image\src\config\config.php] To [\config\image
.php]
Publishing complete.
請(qǐng)求 guzzlehttp/guzzle
【發(fā)送http請(qǐng)求】
composer require guzzlehttp/guzzle
七牛云 zgldh/qiniu-laravel-storage
【選擇性安裝】
composer require zgldh/qiniu-laravel-storage
自動(dòng)引入服務(wù)提供者
excel處理 maatwebsite/excel
【選擇性安裝】
composer require maatwebsite/excel
自動(dòng)引入服務(wù)提供者
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
模型排序 spatie/eloquent-sortable
【選擇性安裝】
composer require spatie/eloquent-sortable
問題
問題1: 執(zhí)行 php artisan migrate
后報(bào)錯(cuò) SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
問題分析: MySql
支持的 utf8
編碼最大字符長度為3字節(jié)绊诲,如果遇到4字節(jié)的寬字符就會(huì)出現(xiàn)插入異常。三個(gè)字節(jié)UTF-8最大能編碼的Unicode字符是 0xffff
褪贵,即Unicode中的基本多文種平面(BMP)掂之。因而包括 Emoji
表情(Emoji是一種特殊的Unicode編碼)在內(nèi)的非基本多文種平面的Unicode字符都無法使用MySql的utf8字符集存儲(chǔ)。
這也應(yīng)該就是 Laravel 5.4 改用 4 字節(jié)長度的 utf8mb4
字符編碼的原因之一脆丁。不過要注意的是世舰,只有MySql 5.5.3版本以后才開始支持 utf8mb4
字符編碼(查看版本-mysql命令:SELECT VERSION( )
)
解決方案: 在 AppServiceProvider
中調(diào)用 Schema::defaultStringLength
方法來實(shí)現(xiàn)配置
use Illuminate\Support\Facades\Schema;
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191);
}
-
問題2: 使用
laravel new yunjuji-generator
報(bào)錯(cuò)Script "post-install-cmd" is not defined in this package
解決方案: 問題不解決也可以, 如需解決請(qǐng)執(zhí)行 composer global update
或者 composer global require "laravel/installer"