========
前置き
composer パッケージを作るまではいかない、現在作成中の Laravel4 プロダクト内だけで使うような共通機能の作成と登録・適用について。
なんのために調べたの?
- 複数の自作 Artisan コマンドやフロントコントローラーにまたがって使いたい定数や共通処理を、 1 つのファイル (クラス) でまとめたかったから。
何が嬉しいの?
- composer dump-autoload をしないで済み、改修範囲が Laravel4 内で完結する
- これにより、当該ライブラリを改修する場合、確認・変更箇所が少なくて済む
方法
実は、
What are the best practices and best places for laravel 4 helpers or basic functions? - Stack Overflow
のまんまです…。
-
app/libraries
ディレクトリを作成。 (libraries は任意) - その中に
Orelib/Orelib.php
のようにディレクトリとファイルを作成する (それぞれの名前は任意) -
ファイルの中身は次のようになる
Orelib/Orelib.php<?php namespace Orelib; class Orelib { public static function hello() { $message = 'Hello'; return $message; } }
-
app/start/global.php
の当該箇所に libraries のパスを追記する。app/start/global.phpClassLoader::addDirectories(array( app_path().'/commands', app_path().'/controllers', app_path().'/models', app_path().'/database/seeds', app_path().'/libraries', // <- Add this ));
-
app/config/app.php
のaliases
セクションに当該設定を追記する。app/config/app.php... ... 'aliases' => array( ... ... 'Orelib' => 'Orelib\Orelib', ), ... ...
任意の自作コマンドファイルやコントローラー内に
echo Orelib::hello()
のように記述して使う。
関係ないこと
Query Builder がどんな SQL を生成するのか知りたい。
$db->toSql()
で良いみたい。
$query = DB::table('books')
->whereRaw('(created_at - NOW()) < 86400')
;
// クエリを投げる前に SQL を取得・確認したい
echo $query->take(1)->toSql();
echo "\n----------------------------------------\n";
// クエリが実行された後で、投げられた SQL を取得・確認したい
$result = $query->first();
dd(DB::getQueryLog());
出力
select * from `books` where (created_at - NOW()) < 86400 limit 1
----------------------------------------
array(1) {
[0]=>
array(3) {
["query"]=>
string(78) "select * from `books` where (created_at - NOW()) < 86400 limit 1"
["bindings"]=>
array(0) {
}
["time"]=>
float(1.71)
}
}
ちなみに dd() すると 内部に die
が書かれているので、そこで処理が中断・終了します。
以上。