Laravelでのnamespaceの使い方

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を設定することで自分たちの思い通りのディレクトリ構成が作れるのが魅力の一つだと思います。