LoginSignup
7
6

More than 5 years have passed since last update.

Laravel4 の環境に composer dump-autoload を使わずに自作 (ライブラリ|クラス|ヘルパー) を登録する

Last updated at Posted at 2014-10-23

========

前置き

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
のまんまです…。

  1. app/libraries ディレクトリを作成。 (libraries は任意)
  2. その中に Orelib/Orelib.php のようにディレクトリとファイルを作成する (それぞれの名前は任意)
  3. ファイルの中身は次のようになる

    Orelib/Orelib.php
        <?php
        namespace Orelib;
        class Orelib {
            public static function hello() {
                $message = 'Hello';
                return $message;
            }
        }
    
  4. app/start/global.php の当該箇所に libraries のパスを追記する。

    app/start/global.php
        ClassLoader::addDirectories(array(
            app_path().'/commands',
            app_path().'/controllers',
            app_path().'/models',
            app_path().'/database/seeds',
            app_path().'/libraries', // <- Add this
    
        ));
    
  5. app/config/app.phpaliases セクションに当該設定を追記する。

    app/config/app.php
        ...
        ...
        'aliases' => array(
        ...
        ...
            'Orelib'      => 'Orelib\Orelib',
        ),
        ...
        ...
    
  6. 任意の自作コマンドファイルやコントローラー内に 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 が書かれているので、そこで処理が中断・終了します。

以上。

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6