laravel5.2 オリジナルの共通処理や関数ライブラリを作る

namespaceきっておけばどこでも呼べる(はず)んだろうけど、せっかくlaravel5.2使っているので、お作法通りにやってみる。

参考

qiita.com

たぶんこういうこと

app.phpで作成したエイリアスの情報をもとに、ファサードにたどり着くと依存性の注入をする際に必要な文字列をもらえる。 その文字列と合致する情報をサービスコンテナが注入しちゃうとサービスになる。

いろんなとこで使う予定のライブラリ

app/Libs/Util.php

<?php
namespace App\Libs;

class Util
{

    public static function welcome()
    {
        return 'welcome';
    }


}

サービスプロバイダを作る

php artisan make:provider UtilServiceProvider

得意のartisanで雛形作成。

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class UtilServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        //
        $this->app->bind(
            'util',
            'App\Libs\Util'
        );
    }

}

この中の $this->app がサービスコンテナにアクセスするオブジェクト。

サービスプロバイダー 5.1 Laravel

では、「サービスプロバイダーのregisterメソッドではサービスコンテナへの登録だけを行え」とのこと。 $this->app->bind 以外にも singletonメソッドやinstanceメソッドとかがあるみたい。

サービスコンテナ 5.1 Laravel

サービスプロバイダを登録する

config/app.php

    'providers' => [

        App\Providers\UtilServiceProvider::class,
    ]

サービスプロバイダで指定した文字列返すファサードを作る

app/Facades/Util.php

<?php
namespace App\Facades;

use Illuminate\Support\Facades\Facade;

/**
 * @see \Illuminate\Cache\CacheManager
 * @see \Illuminate\Cache\Repository
 */
class Util extends Facade
{
    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor()
    {
        return 'util';
    }
}

このサービスをエイリアスで呼べるように登録

config/app.php

    'aliases' => [

        'Util' => App\Facades\Util::class,
    ]

phpstormでnot foundにならないように

php artisan ide-helper:generate

使い方

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use Auth;
use Util;


class FooController extends Controller
{
    //
    public function index(Request $request)
    {


        $a = Util::welcome();
        var_dump($a);

    }
}