Laravelでのautoload使用の際のメモ(使用法・注意点など)

PHP

PHPでWebシステムを開発する際、使い回す部分は別ファイルとして定義し、都度呼び出すようにすれば、冗長化をなくすことができて便利。

ただ、通常のPHPと違い、フレームワーク化されたLaravelではrequire(もしくはrequire_once)をviewの中で使用することができず、エラーになる。

ではどうするかと言うと、Composerの機能であるautoloadを使用する。

※ 本記事は全くの個人的なメモですので、内容は参考程度にお願いします。

Composer autoloadの使い方

修正するファイル

  • composer.json (Laravelプロジェクトディレクトリ直下にある)
  • 部品化した.phpファイル(今回はプロジェクト直下にtestを作り、そこに置く)
  • 呼び出し元の.php(もしくは.blade.php)

手順

① composer.jsonの編集

composer.jsonの”autoload”の下、”par-4″にディレクトリの場所を追加。
“Test\\”は名前空間の意味(PHPのnamaspaceで指定するところ)。

以下のように修正。

"autoload": {
    "psr-4": {
        "App\\": "app/",
        "Test\\": "test/"
    },
    "classmap": [
        "database/seeds",
        "database/factories"
    ]
},

② 部品の.phpファイルを作成

①で指定したディレクトリに部品化したPHPファイルを作成。
(今回の場合は、Laravelプロジェクトディレクトリ配下のtest)

注意点としては、PHPのクラスとして定義しないといけないこと。
(それと呼び出すためのファンクション)
今回は、静的なメソッドを定義しています。

以下のように書いてみました。

<?php
namespace Test;

Class Test{

  function __construct() { }

  public static function get_message() {

    $head = <<< EOM
    <p>Test Message</p>
    EOM;

    return $head;
  }
}
?>

③ composer dump-autoloadを実行

Laravelプロジェクトディレクトリ直下で以下のコマンドを実行。

composer dump-autoload

うまくできると、以下のメッセージが出ます。

Package manifest generated successfully.

④ 呼び出す側の.phpを作る

今回は静的メソッドを呼び出し、文字列としてただ出力するだけです。

<?php
var_dump(Test\Test::get_message());
?>

エントリポイントであるindex.phpで、vendor/autoload.phpが実行されているため、各々のページでわざわざrequire…を記述する必要はありません。

 

以上です。

 

参考:
Basic usage – Autoloading (Composer公式)
Autoloader Optimization (同上)