七夕 -- medoo

右耳聆聽心的聲音發表於2018-08-17

****>燁竹

本文參考:教程:Laravel 5.3 下新增自定義 Facade 的步驟

今天七夕,很不幸,聽說前女友要結婚了,下個七夕一定不會再一個人過了;

官方文件

medoo的優點就不多做介紹了,官方首頁有詳細的介紹;就本人而言只是為了實現‘優雅的偷懶’;優雅在於程式碼的優雅,偷懶是因為學了它,就再也不用學習其他的資料庫操作類了;

與laravel的互動上面,app.php後面這一段

//使用Medoo名稱空間
使用Medoo \ Medoo ; 

//註冊為資料庫
$ app - > singleton ('database' ,function (){   
    返回新的Medoo ([  
        'database_type' => 'mysql' ,  
        'database_name' => 'name' ,  
        'server' => 'localhost' ,  
        'username' => 'your_username' ,  
        'password' => 'your_password'  
    ]);
});

不太喜歡;(或者說不太優雅,還不如去註冊一個自定義的門面類)

自定義門面MedooCustom實現:

1、在App下的自定義目錄,新增自定義門面類和自定義容器

/app
|- Custom
    |- Classes 這裡新增自定義 Facade 類
    |- Facades 這裡新增自定義容器

app/Custom/Classes/MedooCustom.php

<?php

namespace App\Custom\Classes;

use catfan\medoo;

class MedooCustom
{
    public function initMedoo($dbname)
    {
        return new medoo([
            // required
            'database_type' => 'mysql',
            'database_name' => $dbname,
            'server' => 'localhost',
            'username' => 'root',
            'password' => 'root',
            // 'port' => 3306,
        ]);
    }
}

app/Custom/Facades/MedooCustom.php

<?php

namespace App\Custom\Facades;

use Illuminate\Support\Facades\Facade;

class MedooCustom extends Facade
{
    protected static function getFacadeAccessor()
    {
        return 'medoocustom';
    }
}

2、將自定義的 Facade 和自定義的 Class 繫結起來

$ php artisan make:provider MedooCustomServiceProvider

成功後會建立一個新檔案:app/Providers/MLSServiceProvider.php,然後我們在 register() 部分添點東西,如下:

<?php

namespace App\Providers;

use App\Custom\Classes\MedooCustom;
use Illuminate\Support\ServiceProvider;

class MedooCustomServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     */
    public function boot()
    {
    }

    /**
     * Register the application services.
     */
    public function register()
    {
        $this->app->bind('medoocustom', function () {
            return new MedooCustom($app->make('HttpClient'));
        });
    }
}

3、新增到自定義容器和取別名

'providers' => [
    ...
        App\Providers\MedooCustomServiceProvider::class,
    ],

'aliases' => [
    ...
 'MedooCustom' =>App\Custom\Facades\MedooCustom::class,
]

4、定義路由,控制器中直接呼叫

$router->get('/foo', 'HomeController@foo');
<?php

namespace App\Admin\Controllers;

use App\Http\Controllers\Controller;
use Encore\Admin\Controllers\Dashboard;
use Encore\Admin\Facades\Admin;
use Encore\Admin\Layout\Column;
use Encore\Admin\Layout\Content;
use Encore\Admin\Layout\Row;
use MedooCustom;

class HomeController extends Controller
{
    public function foo()
    {
        //使用Medoo連線資料庫
        $db = MedooCustom::initMedoo('aaa');

        $data = $db->select('movies', ['id', 'title']);

        return json_encode($data);
    }
}

demoo就不多做介紹,以前的筆記有過總結https://www.jianshu.com/p/0e552d70155e

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章