PHP フレームワーク Slim3 にて namespace を使う

ディレクトリ構成

  • ディレクトリ、ファイル数が多いので今回変更するディレクトリ、ファイルのみ表示
  • composer を bin/ 以下で使用できるようにインストール
bin/
  └ composer
composer.json
src/
  ├ infrastructure/
  │   └ routes.php
  ├ interfaces/
  │   └ controllers/
  │       └ IndexController.php
  └ domain/
      └ User.php

サンプル

composer.json

namespace を使う時は下記を追加する

{
    "autoload-dev": {
        "psr-4": {
            "Src\\": "src/",
        }
    }
}

routes.php

Container Resolution のようにコントローラーに namespace を使う場合は use \Src\Interfaces\Controllers\IndexController; は使えないので下記のようにする。

$app->get('/', '\Src\Interfaces\Controllers\IndexController:get');

IndexController.php

namespace Src\Interfaces\Controllers;

use Interop\Container\ContainerInterface;
use Slim\Http\Request;
use Slim\Http\Response;

use Src\Domain\User;


class IndexController
{

	private $container;


	public function __construct(ContainerInterface $container)
	{
		$this->container = $container;
	}


	public function get(Request $request, Response $response, array $args)
	{
		$user = new User;
		var_dump($user);
	}

}

User.php

namespace Src\Domain;

class Me
{
	public $id = 0;

	public $screenName = '';

	public $displayName = '';

}

ビルド

  • composer install や新たにパッケージをインストールした。
  • namespace の行を書き換えた
  • namespace を使用するファイルを新しく作成した。

上記操作を行った場合に下記コマンドを実行する。
まだ一度も下記コマンドを実行していない場合も実行する。

$ bin/composer dump-autoload -o