Laravel admin 後臺管理外掛的使用
今天透過使用 laravel-admin 外掛,來簡單說說怎麼優雅的寫 Laravel 程式碼。
建立 Laravel 專案
laravel-admin是一個基於laravel的後臺管理開發框架,能幫助你使用很少的時間和程式碼量開發出功能完備的管理後臺,另外它作為一個三方包,可以和框架內其它專案並行開發,真正做到前後臺開發分離。
我們根據官方文件走,建立一個 Laravel 專案還是很簡單的:
// 使用 Composer 下載 Laravel 安裝程式
composer global require "laravel/installer"
// 建立 web 專案
laravel new web
具體配置資料庫等:略
安裝 laravel-admin
laravel-admin 是一個可以快速幫你構建後臺管理的工具,它提供的頁面元件和表單元素等功能,能幫助你使用很少的程式碼就實現功能完善的後臺管理功能。
注:當前版本(1.5)需要安裝 PHP 7+和 Laravel 5.5
看看 laravel-admin 的特性:
內建使用者和許可權系統
model-grid 支援快速構建資料表格
model-form 支援快速構建資料表單
model-tree 支援快速構建樹狀資料
內建 40+ 種 form 元素元件、以及支援擴充套件元件
支援 Laravel 的多種模型關係
mysql、mongodb、pgsql 等多資料庫支援
支援引入第三方前端庫
資料庫和 artisan 命令列工具的 web 實現
支援自定義圖表
多種常用 web 元件
支援本地和 oss 檔案上傳
有了這些功能,開發一個後臺管理系統就變得相對簡單了。
安裝外掛:
composer require encore/laravel-admin "1.5.*"
// 釋出資源:
php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"
// 安裝
php artisan admin:install
簡單的三條命令,即可配置好一個簡單的後臺管理系統,賬號和密碼都是 admin
程式碼主要集中在\APP\Admin中
預設系統提供了一個 Dashboard 介面:
namespace App\Admin\Controllers;
use App\Http\Controllers\Controller;
use Encore\Admin\Facades\Admin;
use Encore\Admin\Layout\Column;
use Encore\Admin\Layout\Content;
use Encore\Admin\Layout\Row;
class HomeController extends Controller
{
public function index()
{
return Admin::content(function (Content $content) {
$content->header('Test Dashboard');
$content->description('Description...');
$content->row(Dashboard::title());
$content->row(function (Row $row) {
$row->column(4, function (Column $column) {
$column->append(Dashboard::environment());
});
$row->column(4, function (Column $column) {
$column->append(Dashboard::extensions());
});
$row->column(4, function (Column $column) {
$column->append(Dashboard::dependencies());
});
});
});
}
}
結合介面和程式碼,可以看出介面主要分成這麼幾個部分:header、description、兩個 row,後一個 row 包含三個 column 模組;具體的程式碼放在 Dashboard 程式碼中,如下:
namespace Encore\Admin\Controllers;
use Encore\Admin\Admin;
class Dashboard
{
/**
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public static function title()
{
return view('admin::dashboard.title');
}
/**
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public static function environment()
{
$envs = [
['name' => 'PHP version', 'value' => 'PHP/'.PHP_VERSION],
['name' => 'Laravel version', 'value' => app()->version()],
['name' => 'CGI', 'value' => php_sapi_name()],
['name' => 'Uname', 'value' => php_uname()],
['name' => 'Server', 'value' => array_get($_SERVER, 'SERVER_SOFTWARE')],
['name' => 'Cache driver', 'value' => config('cache.default')],
['name' => 'Session driver', 'value' => config('session.driver')],
['name' => 'Queue driver', 'value' => config('queue.default')],
['name' => 'Timezone', 'value' => config('app.timezone')],
['name' => 'Locale', 'value' => config('app.locale')],
['name' => 'Env', 'value' => config('app.env')],
['name' => 'URL', 'value' => config('app.url')],
];
return view('admin::dashboard.environment', compact('envs'));
}
/**
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public static function extensions()
{
$extensions = [
'helpers' => [
'name' => 'laravel-admin-ext/helpers',
'link' => '
'icon' => 'gears',
],
'log-viewer' => [
'name' => 'laravel-admin-ext/log-viewer',
'link' => '
'icon' => 'database',
],
'backup' => [
'name' => 'laravel-admin-ext/backup',
'link' => '
'icon' => 'copy',
],
'config' => [
'name' => 'laravel-admin-ext/config',
'link' => '
'icon' => 'toggle-on',
],
'api-tester' => [
'name' => 'laravel-admin-ext/api-tester',
'link' => '
'icon' => 'sliders',
],
'media-manager' => [
'name' => 'laravel-admin-ext/media-manager',
'link' => '
'icon' => 'file',
],
'scheduling' => [
'name' => 'laravel-admin-ext/scheduling',
'link' => '
'icon' => 'clock-o',
],
'reporter' => [
'name' => 'laravel-admin-ext/reporter',
'link' => '
'icon' => 'bug',
],
'translation' => [
'name' => 'laravel-admin-ext/translation',
'link' => '
'icon' => 'language',
],
];
foreach ($extensions as &$extension) {
$name = explode('/', $extension['name']);
$extension['installed'] = array_key_exists(end($name), Admin::$extensions);
}
return view('admin::dashboard.extensions', compact('extensions'));
}
/**
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public static function dependencies()
{
$json = file_get_contents(base_path('composer.json'));
$dependencies = json_decode($json, true)['require'];
return view('admin::dashboard.dependencies', compact('dependencies'));
}
}
這樣我們就把程式碼分塊的組織在一起。具體佈局類看:class Content implements Renderable
其它的靜態資原始檔放在 /public/vendor/laravel-admin 目錄下
禁用建立按鈕
$grid->disableCreateButton();
禁用分頁條
$grid->disablePagination();
禁用查詢過濾器
$grid->disableFilter();
禁用匯出資料按鈕
$grid->disableExport();
禁用行操作列
$grid->disableActions();
設定分頁選擇器選項
$grid->perPages([10, 20, 30, 40, 50]);
model-grid預設有兩個行操作編輯和刪除,可以透過下面的方式關閉它們:
$grid->actions(function ($actions) {
// 隱藏刪除按鈕
$actions->disableDelete();
// 隱藏修改按鈕
$actions->disableEdit();
});
如果有自定義的操作按鈕,可以透過下面的方式新增:
$grid->actions(function ($actions) {
// append一個操作
$actions->append('');
// prepend一個操作
$actions->prepend('');
});
獲取主鍵資訊或者獲取當前行的陣列
$grid->actions(function ($actions) {
// 當前行的資料陣列
$row = $actions->row;
// 獲取當前行主鍵值
$id = $actions->getKey();
});
複製程式碼目前預設實現了批次刪除操作的功能,如果要關掉批次刪除操作:
$grid->tools(function ($tools) {
$tools->batch(function ($batch) {
$batch->disableDelete();
});
});
查詢過濾Filter:如下
$grid->filter(function ($query) {
// 去掉預設的id過濾器
$query->disableIdFilter();
$query->like('title', '文章標題');
$query->equal('cate_id', '所屬分類')->select(
ArticleCategories::pluck('name', 'id')
);
});
form的一些小技巧 :
$form->text('from', '文章來源')->rules('required') //可以加rules驗證規則
$form->image('thumb', '文章縮圖')->uniqueName()
->move('upload/article/' . date("Ymd"))
->options(['overwriteInitial' => true]);//代表新圖片替換修圖片
->uniqueName() //為隨機名稱
//儲存前回撥
$form->saving(function (Form $form) {
});
//儲存後回撥
$form->saved(function (Form $form) {
});
設定表單提交的action
$form->setAction('admin/users');
獲取URL中的id
$shopId = request()->route()->parameter('shop');
當為新增操作時,店鋪名稱不可和資料庫內其他資料重複
當為修改操作時,店鋪名稱除自己外不可和資料庫內其他資料重複
if ($shopId) { 無錫人流醫院哪家好
$form->text('shop_name', '店鋪名稱')
->rules("required|unique:shops,shop_name,{$shopId},id");
} else {
$form->text('shop_name', '店鋪名稱')
->rules("required|unique:shops");
}
進入grid表格時,預設id倒序
$grid->model()->orderBy('id', 'desc');
多圖片上傳
昨天有個朋友在開發一個功能的時候,因為需要用到多圖上傳,問我Laravel_admin怎麼做多圖片上傳,所以我也是檢視文件,但是官方文件基本沒談到,最後還是在外網上找到,今天向大家分享有關使用小技巧。
我們可以在表單中這樣引用多圖上傳,程式碼如下:
$form->multipleImage('images', '圖冊')->help('請上傳圖片格式')->removable();
但是我們用到removeable()方法需要注意在form表單中不能使用MessageBag方法。
然後在資料模型中,我們必須這樣定義兩個方法,程式碼如下:
public function getLogoAttribute($value)
{
return explode(',', $value);
}
public function setLogoAttribute($value)
{
$this->attributes['images'] = implode(',', $value);
}
完成以上操作,我們便成功的配置完多圖上傳。
更多內容參考 laravel-admin 官網:
laravel-admin.org/docs/#/zh/
總結
有了 Laravel 和 laravel-admin,基本不用寫什麼程式碼,敲敲幾個命令就可以完成一個「功能比較齊全」的資源操作後臺。極大的方便了我們的開發。
總體命令列和程式碼如下
php artisan make:model Movie -m
php artisan migrate
composer require fzaninotto/faker
php artisan make:seeder MovieTableSeeder
php artisan db:seed --class=MovieTableSeeder
php artisan admin:make MovieController --model=App\\Movie
$router->resource('movies', MovieController::class);
框架和開源外掛,有時候確實是能方便我們開發,所以尋找優質的框架和開源庫也是促進我們生產力的。
laravel-admin 程式碼是如何組織的,可以具體參考網站開發。先根據官網的介紹,利用好 laravel-admin,然後學習它的原始碼和程式碼設計,最後取其精華,為你所用。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2656104/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- laravel-admin 使用wang-editor 富文字外掛Laravel
- 關於 Laravel-admin 後臺管理系統 setTagsAttribute 的正確使用Laravel
- Laravel-admin-init 管理後臺基礎架構Laravel架構
- yamecent-admin 基於 Laravel 框架的 rbac 後臺管理系統Laravel框架
- ? Slow Admin - 使用Laravel和Amis快速構建你的後臺Laravel
- fastadmin的【外掛管理】外掛使用教程AST
- [外掛擴充套件]帶後臺管理 和前臺顯示 友情連結 外掛套件
- Django(66)admin後臺管理註冊使用者Django
- laravel-admin 按模組拆分後臺業務元件 laravel-admin-modulesLaravel元件
- [外掛擴充套件]書架外掛(新外掛後臺)套件
- Laravel 55 + layuiadmin 的後臺管理LaravelUI
- laravel-admin 來使用前端元件做個後臺首頁吧Laravel前端元件
- moell/Laravel-layui-admin : 支援 Laravel6.0 的 RBAC 後臺系統LaravelUI
- Laravel 外掛 PhpSpreadSheet 使用總結LaravelPHP
- [外掛擴充套件]自己寫的外掛。怎麼後臺?套件
- 修改公司網站 外掛,如何在公司網站後臺安裝和管理外掛網站
- Laravel-Admin 登入 騰訊滑動驗證碼外掛Laravel
- [外掛推薦] 使用 PHPStorm 中的 Laravel Plugin 外掛提升開發效率PHPORMLaravelPlugin
- Laravel-Admin Dcat-Admin 登入 滑動驗證碼外掛 2021-04-22Laravel
- larke-admin 是一套使用 Laravel 8 、JWT 和 RBAC鑑權的前後端分離的通用後臺管理系統LaravelJWT後端
- 使用外掛 laravel-mix-purgecss 清除未使用的 cssLaravelCSS
- Vue+element搭建後臺管理系統-二、安裝外掛Vue
- Laravel通用外掛Laravel
- [外掛擴充套件]工作時間軸(新外掛後臺)套件
- [外掛擴充套件]OneThink後臺增刪改查外掛套件
- Vary Admin:基於Vue.js的後臺管理模板Vue.js
- Laravel-Admin 登入 滑動驗證碼外掛 2019-12-30Laravel
- Laravel-admin 碼的電子商務後臺系統 (小白看)Laravel
- OneThink後臺增刪改查外掛
- voyager 一個久違的 Laravel 管理後臺Laravel
- Django Admin後臺管理:高效開發與實踐Django
- 關於 laravel-like-comment評論外掛的使用Laravel
- 使用 Laravel5.7 許可權管理系統後臺及前後臺使用者登入Laravel
- laravel 使用 auth:admin 中介軟體後, 會把 Auth->defaultDriver 設定為 adminLaravel
- la-admin 釋出,基於 Laravel 6 和 Angular 8 的通用後臺LaravelAngular
- HtmlWebpackPlugin外掛和HtmlWebpackInlineSourcePlugin外掛的使用HTMLWebPlugininline
- vue-admin-template搭建後臺管理系統的學習(一)Vue
- 最好用的 7 款 Vue admin 後臺管理系統測評Vue