
Laravel5のクラスエイリアスを使って、自作クラスや関数を扱える用にする方法。
環境
- Laravel 5.2
やること
- 自作クラスを作成
- app.phpのaliasesに自作クラスを登録する
自作クラスを作成
まずは何か作ってみる。
おなじみ artisan …ではなく勝手に作成する。
自作クラス用のディレクトリを作成
とりあえずLibディレクトリを作って app/Lib/Common.php とでもする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
./app ├── Console │ └── Commands ├── Events ├── Exceptions ├── Http │ ├── Controllers │ │ └── Auth │ ├── Middleware │ └── Requests ├── Jobs ├── Lib <- new │ └── Common.php <- new ├── Listeners ├── Policies ├── Providers └── Validation |
自作クラス
自由に作れるが、ネームスペースをしっかり付けないとアカンので注意。
app/Lib/Common.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
<?php namespace App\Lib; /** * お手製関数たち置き場 */ class Common { /** * URLセーフなエンコード * * @param string|int $data * @return string */ public static function url_encode($data) { return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); } /** * url_encodeでエンコードした文字列をデコード * * @param string $data * @return string */ public static function url_decode($data) { return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT)); } /** * URLセーフなCrypt encode * * @param string|int $str * @return string */ public static function crypt_encode($str = '') { return self::url_encode(\Crypt::encrypt($str)); } /** * crypt_encodeをデコード * * @param string|int $str * @return string */ public static function crypt_decode($str = '') { return \Crypt::decrypt(self::url_decode($str)); } /** * stdオブジェクトを配列に変換 */ public static function obj2arr($obj) { if(is_array($obj)) { foreach ($obj as &$val) { $val = self::obj2arr($val); } } else if(!is_object($obj)) { return $obj; } $arr = (array) $obj; foreach ( $arr as &$a ) { $a = self::obj2arr($a); } return $arr; } } |
自作クラスを登録する
config/app.phpのaliasesに先ほどのクラスを追加する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
/* |-------------------------------------------------------------------------- | クラスエイリアス |-------------------------------------------------------------------------- | | このクラスエイリアスの配列はこのアプリケーションが開始されると登録されます。 | エイリアスをどんなに好きなだけ自由に登録しても、「遅延」ロードされるので、 | パフォーマンスを妨げることはありません。 | */ 'aliases' => [ 'App' => Illuminate\Support\Facades\App::class, 'Artisan' => Illuminate\Support\Facades\Artisan::class, 'Auth' => Illuminate\Support\Facades\Auth::class, 'Blade' => Illuminate\Support\Facades\Blade::class, 'Cache' => Illuminate\Support\Facades\Cache::class, 'Config' => Illuminate\Support\Facades\Config::class, 'Cookie' => Illuminate\Support\Facades\Cookie::class, 'Crypt' => Illuminate\Support\Facades\Crypt::class, 'DB' => Illuminate\Support\Facades\DB::class, 'Eloquent' => Illuminate\Database\Eloquent\Model::class, 'Event' => Illuminate\Support\Facades\Event::class, 'File' => Illuminate\Support\Facades\File::class, 'Gate' => Illuminate\Support\Facades\Gate::class, 'Hash' => Illuminate\Support\Facades\Hash::class, 'Lang' => Illuminate\Support\Facades\Lang::class, 'Log' => Illuminate\Support\Facades\Log::class, 'Mail' => Illuminate\Support\Facades\Mail::class, 'Password' => Illuminate\Support\Facades\Password::class, 'Queue' => Illuminate\Support\Facades\Queue::class, 'Redirect' => Illuminate\Support\Facades\Redirect::class, 'Redis' => Illuminate\Support\Facades\Redis::class, 'Request' => Illuminate\Support\Facades\Request::class, 'Response' => Illuminate\Support\Facades\Response::class, 'Route' => Illuminate\Support\Facades\Route::class, 'Schema' => Illuminate\Support\Facades\Schema::class, 'Session' => Illuminate\Support\Facades\Session::class, 'Storage' => Illuminate\Support\Facades\Storage::class, 'URL' => Illuminate\Support\Facades\URL::class, 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, //お手製 'Common' => App\Lib\Common::class, //<- new ], |
これでOK.
コントローラなどから \Common::crypt_encode(); で使えるようになる。
ググるとcomposerのautoloadで〜とかの方法がでてくるけど、
これじゃダメなのか?
何かあるんだろうか?