讓你優雅的寫代碼的Laravel-admin插件

讓你優雅的寫代碼的Laravel-admin插件

如何優雅的寫代碼,我想是每位程序員的心聲。自從15年初第一次接觸 laravel 4.2 開始,我就迷上使用 Laravel 框架了。我一直都想找個時間好好寫寫有關 Laravel 的使用文章,由淺入深的介紹 Laravel 框架。

今天通過使用 laravel-admin 插件,來簡單說說怎么優雅的寫 Laravel 代碼。

創建 Laravel 項目

只要跟著官方文檔走,創建一個 Laravel 項目還是很簡單的:

//?使用?Composer?下載?Laravel?安裝程序 composer?global?require?"laravel/installer" //?創建?web?項目 laravel?new?web

具體配置數據庫等:略

安裝 Laravel 看官網:https://d.laravel-china.org/docs/5.5/installation

安裝 laravel-admin

laravel-admin 是一個可以快速幫你構建后臺管理的工具,它提供的頁面組件和表單元素等功能,能幫助你使用很少的代碼就實現功能完善的后臺管理功能。

注:當前版本(1.5)需要安裝 php 7+和 Laravel 5.5

看看 laravel-admin 的特性:

·內置用戶和權限系統

·model-grid 支持快速構建數據表格

·model-form 支持快速構建數據表單

·model-tree 支持快速構建樹狀數據

·內置 40+ 種 form 元素組件、以及支持擴展組件

·支持 Laravel 的多種模型關系

·mysqlmongodb、pgsql 等多數據庫支持

·支持引入第三方前端庫

·數據庫和 artisan 命令行工具的 web 實現

·支持自定義圖表

·多種常用 web 組件

·支持本地和 oss 文件上傳

有了這些功能,開發一個后臺管理系統就變得相對簡單了。

安裝插件:

composer?require?encore/laravel-admin?"1.5.*" //?發布資源: php?artisan?vendor:publish?--provider="EncoreAdminAdminServiceProvider" //?安裝 php?artisan?admin:install

簡單的三條命令,即可配置好一個簡單的后臺管理系統,賬號和密碼都是 admin

讓你優雅的寫代碼的Laravel-admin插件

代碼主要集中在APPAdmin中

讓你優雅的寫代碼的Laravel-admin插件

相關推薦:《laravel教程

默認系統提供一個 Dashboard 界面:

<?php namespace AppAdminControllers; use AppHttpControllersController; use EncoreAdminFacadesAdmin; use EncoreAdminLayoutcolumn; use EncoreAdminLayoutContent; use EncoreAdminLayoutRow; class HomeController extends Controller {     public function index()     {         return Admin::content(function (Content $content) {             $content->header('Test?Dashboard'); ????????????$content-&gt;description('Description...'); ????????????$content-&gt;row(Dashboard::title()); ????????????$content-&gt;row(function?(Row?$row)?{ ????????????????$row-&gt;column(4,?function?(Column?$column)?{ ????????????????????$column-&gt;append(Dashboard::environment()); ????????????????}); ????????????????$row-&gt;column(4,?function?(Column?$column)?{ ????????????????????$column-&gt;append(Dashboard::extensions()); ????????????????}); ????????????????$row-&gt;column(4,?function?(Column?$column)?{ ????????????????????$column-&gt;append(Dashboard::dependencies()); ????????????????}); ????????????}); ????????}); ????} }

結合界面和代碼,可以看出界面主要分成這么幾個部分:header、description、兩個 row,后一個 row 包含三個 column 模塊;具體的代碼放在 Dashboard 代碼中,如下:

<?php namespace EncoreAdminControllers; use EncoreAdminAdmin; class Dashboard {     /**      * @return IlluminateContractsViewFactory|IlluminateViewView      */     public static function title()     {         return view(&#39;admin::dashboard.title&#39;);     }     /**      * @return IlluminateContractsViewFactory|IlluminateViewView      */     public static function environment()     {         $envs = [             [&#39;name&#39; =>?'PHP?version',???????'value'?=&gt;?'PHP/'.PHP_VERSION], ????????????['name'?=&gt;?'Laravel?version',???'value'?=&gt;?app()-&gt;version()], ????????????['name'?=&gt;?'CGI',???????????????'value'?=&gt;?php_sapi_name()], ????????????['name'?=&gt;?'Uname',?????????????'value'?=&gt;?php_uname()], ????????????['name'?=&gt;?'Server',????????????'value'?=&gt;?array_get($_SERVER,?'SERVER_SOFTWARE')], ????????????['name'?=&gt;?'Cache?driver',??????'value'?=&gt;?config('cache.default')], ????????????['name'?=&gt;?'Session?driver',????'value'?=&gt;?config('session.driver')], ????????????['name'?=&gt;?'Queue?driver',??????'value'?=&gt;?config('queue.default')], ????????????['name'?=&gt;?'Timezone',??????????'value'?=&gt;?config('app.timezone')], ????????????['name'?=&gt;?'Locale',????????????'value'?=&gt;?config('app.locale')], ????????????['name'?=&gt;?'Env',???????????????'value'?=&gt;?config('app.env')], ????????????['name'?=&gt;?'URL',???????????????'value'?=&gt;?config('app.url')], ????????]; ????????return?view('admin::dashboard.environment',?compact('envs')); ????} ????/** ?????*?@return?IlluminateContractsViewFactory|IlluminateViewView ?????*/ ????public?static?function?extensions() ????{ ????????$extensions?=?[ ????????????'helpers'?=&gt;?[ ????????????????'name'?=&gt;?'laravel-admin-ext/helpers', ????????????????'link'?=&gt;?'https://github.com/laravel-admin-extensions/helpers', ????????????????'icon'?=&gt;?'gears', ????????????], ????????????'log-viewer'?=&gt;?[ ????????????????'name'?=&gt;?'laravel-admin-ext/log-viewer', ????????????????'link'?=&gt;?'https://github.com/laravel-admin-extensions/log-viewer', ????????????????'icon'?=&gt;?'database', ????????????], ????????????'backup'?=&gt;?[ ????????????????'name'?=&gt;?'laravel-admin-ext/backup', ????????????????'link'?=&gt;?'https://github.com/laravel-admin-extensions/backup', ????????????????'icon'?=&gt;?'copy', ????????????], ????????????'config'?=&gt;?[ ????????????????'name'?=&gt;?'laravel-admin-ext/config', ????????????????'link'?=&gt;?'https://github.com/laravel-admin-extensions/config', ????????????????'icon'?=&gt;?'toggle-on', ????????????], ????????????'api-tester'?=&gt;?[ ????????????????'name'?=&gt;?'laravel-admin-ext/api-tester', ????????????????'link'?=&gt;?'https://github.com/laravel-admin-extensions/api-tester', ????????????????'icon'?=&gt;?'sliders', ????????????], ????????????'media-manager'?=&gt;?[ ????????????????'name'?=&gt;?'laravel-admin-ext/media-manager', ????????????????'link'?=&gt;?'https://github.com/laravel-admin-extensions/media-manager', ????????????????'icon'?=&gt;?'file', ????????????], ????????????'scheduling'?=&gt;?[ ????????????????'name'?=&gt;?'laravel-admin-ext/scheduling', ????????????????'link'?=&gt;?'https://github.com/laravel-admin-extensions/scheduling', ????????????????'icon'?=&gt;?'clock-o', ????????????], ????????????'reporter'?=&gt;?[ ????????????????'name'?=&gt;?'laravel-admin-ext/reporter', ????????????????'link'?=&gt;?'https://github.com/laravel-admin-extensions/reporter', ????????????????'icon'?=&gt;?'bug', ????????????], ????????????'translation'?=&gt;?[ ????????????????'name'?=&gt;?'laravel-admin-ext/translation', ????????????????'link'?=&gt;?'https://github.com/laravel-admin-extensions/translation', ????????????????'icon'?=&gt;?'language', ????????????], ????????]; ????????foreach?($extensions?as?&amp;$extension)?{ ????????????$name?=?explode('/',?$extension['name']); ????????????$extension['installed']?=?array_key_exists(end($name),?Admin::$extensions); ????????} ????????return?view('admin::dashboard.extensions',?compact('extensions')); ????} ????/** ?????*?@return?IlluminateContractsViewFactory|IlluminateViewView ?????*/ ????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 目錄下

更多內容參考 laravel-admin 官網:

http://laravel-admin.org/docs/#/zh/

寫一個 demo

有了這個 laravel-admin 插件,要寫一個 movies 列表,只需要幾個命令行就可以完成了,非常簡單:

1.建立模型,并創建 Migrations:

php?artisan?make:model?Movie?-m

2.在 Migrations,增加一個字段:name

<?php use IlluminateSupportFacadesSchema; use IlluminateDatabaseSchemaBlueprint; use IlluminateDatabaseMigrationsMigration; class CreateMoviesTable extends Migration {     /**      * Run the migrations.      *      * @return void      */     public function up()     {         Schema::create(&#39;movies&#39;, function (Blueprint $table) {             $table->increments('id'); ????????????$table-&gt;string('name',?50)-&gt;unique(); ????????????$table-&gt;timestamps(); ????????}); ????} ????/** ?????*?Reverse?the?migrations. ?????* ?????*?@return?void ?????*/ ????public?function?down() ????{ ????????Schema::dropIfExists('movies'); ????} }

3.運行 Migrations,創建對應數據庫:

php?artisan?migrate

4.有了數據表,就需要往表里插入 fake 數據,用于測試

//?使用該插件創建?fake?數據 composer?require?fzaninotto/faker

5.建立 Seeder

php?artisan?make:seeder?MovieTableSeeder

在該類中,建立1000條假數據:

<?php use IlluminateDatabaseSeeder; class MovieTableSeeder extends Seeder {     /**      * Run the database seeds.      *      * @return void      */     public function run()     {         //         $faker = FakerFactory::create();         for($i = 0; $i < 1000; $i++) {             AppMovie::create([                 &#39;name&#39; =>?$faker-&gt;name ????????????]); ????????} ????} }

運行:

php?artisan?db:seed?--class=MovieTableSeeder

是不是很簡單,數據表直接填充 1000 條假數據:

讓你優雅的寫代碼的Laravel-admin插件

6.建立資源 Controller

php?artisan?admin:make?MovieController?--model=AppMovie

這樣就直接有了基礎的增刪改查和 movie 列表功能的 Controller 了。

7.建立 route

$router-&gt;resource('movies',?MovieController::class);

8.加入到 admin 的 menu 中

讓你優雅的寫代碼的Laravel-admin插件

其中路徑處需要注意的是:

其中uri填寫不包含路由前綴的的路徑部分,比如完整路徑是http://localhost:8000/admin/demo/users, 那么就填demo/users,如果要添加外部鏈接,只要填寫完整的url即可,比如http://laravel-admin.org/.

上圖也是加了左側 movies 菜單的效果。

這就完成了簡單的 movie 資源的后臺管理了,在瀏覽器輸入鏈接:

http://web.app/admin/movies

就能看到一個較為完整的 movie 列表:

讓你優雅的寫代碼的Laravel-admin插件

具體有新增、導出、篩選、操作 (刪除)、撤銷、分頁、修改、刪除等常規功能,如下幾個截圖:

讓你優雅的寫代碼的Laravel-admin插件讓你優雅的寫代碼的Laravel-admin插件讓你優雅的寫代碼的Laravel-admin插件

讓你優雅的寫代碼的Laravel-admin插件

總結

有了 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=AppMovie $router-&gt;resource('movies',?MovieController::class);

框架和開源插件,有時候確實是能方便我們開發,所以尋找優質的框架和開源庫也是促進我們生產力的。

laravel-admin 代碼是如何組織的,可以具體參考網站開發。先根據官網的介紹,利用好 laravel-admin,然后學習它的源碼和代碼設計,最后取其精華,為你所用。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享