Laravelでのnamespaceの使い方
namespaceとは
namespace
とは、PHPで名前空間(エイリアス)を設定するために使用されるものです。
一般的にPHPフォルダーのはじめにnamespace <ファイルのパス>
と記載します。
エイリアスをファイルのパスにすることで自動読み込みを行うことができるようにしています。
<?php
namespace App\Http\Controllers;
class Controller()
{
// Codes...
}
上記の場合だと、プロジェクトルートから相対的にApp/Http/Controllersフォルダにあるソースコードがあることが分かります。
useとは
このPHPファイルで使用するクラスや関数などをuse
を使用して、予め宣言しておくことで、エイリアスを省略できるようにするができるようになると同時にファイルの依存関係も明白に宣言することができます。
一般的にnamespace
の次に記載します。
<?php
namespace App;
use App\Http\Controllers\Controller;
$Controller = new Controller();
Laravelでnamespaceを使う方法
LaravelのController.phpを例に見ていきましょう。
LaravelのController.phpは、/app/Http/Controllersの中にあります。
なのでnamespace
は、namespace App\Http\Controllers;
となります。
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}
新たにディレクトリを作ってnamespaceを設定する
管理画面用のコントロールを作成してみましょう。
ファイルの場所は、/app/Http/Controllers/Admin/ディレクトリを作成し、LoginController.phpファイルを作成します。
namespace
は、ディレクトリの場所が/app/Http/Controllers/Admin/なので、App\Http\Controllers\Adminとなります。
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
class LoginController extends Controller
{
// Codes...
}
今回は、Controller
クラスを継承して作成するので、use
を使ってControllerを指定しています。
エイリアスを正しく指定していれば、自動でLaravel側で必要になった際に自動でクラスをインクルードしてくれます。
おわりに
Laravelでは、namespase
を正しく設定することによって、ファイルを必要な時に自動でインクルードしてくれます。
Laravelのデフォルトのファイル構成では、Modelsディレクトリがないのですが、namespace
を設定することで自分たちの思い通りのディレクトリ構成が作れるのが魅力の一つだと思います。