Slim4めも

$ php composer.phar require vlucas/phpdotenv

.env

DEBUG=1
DISPLAY_ERROR=1

DATABASE_HOST=localhost
DATABASE_POST=3306
DATABASE_NAME=dbname
DATABASE_USER=user
DATABASE_PASS=password
DATABASE_CHARSET=utf8

public/index.php

if (is_readable(__DIR__ . '/../.env')) {
    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/../');
    $dotenv->load();
}

$_ENV もしくは $_SERVER で使用できるようになりますが、getenv では使用できません。

if (is_readable(__DIR__ . '/../.env')) {
    $repository = Dotenv\Repository\RepositoryBuilder::createWithNoAdapters()
        ->addAdapter(Dotenv\Repository\Adapter\EnvConstAdapter::class)
        ->addWriter(Dotenv\Repository\Adapter\PutenvAdapter::class)
        ->immutable()
        ->make();

    $dotenv = Dotenv\Dotenv::create($repository, __DIR__ . '/../');
    $dotenv->load();
}

このようにすると $_ENV もしくは getenv で使用できるようになります。

app/settings.php

            'db' => [
                'host' => getenv('DATABASE_HOST'),
                'port' => getenv('DATABASE_POST'),
                'dbname' => getenv('DATABASE_NAME'),
                'user' => getenv('DATABASE_USER'),
                'password' => getenv('DATABASE_PASS'),
                'charset' => getenv('DATABASE_CHARSET'),
                'options' => [
                    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
                ],
            ],

app/dependencies.php

    $containerBuilder->addDefinitions([
        PDO::class => function (ContainerInterface $c) {
            $settings = $c->get('settings')['db'];

            $dsn = 'mysql:host=' . $settings['host'] . ';'
                . 'port=' . $settings['port'] . ';'
                . 'dbname=' . $settings['dbname'] . ';'
                . 'charset=' . $settings['charset'];

            return new PDO($dsn, $settings['user'], $settings['password'], $settings['options']);
        },
    ]);

src/Application/Actions/Action.php

    /**
     * @var POD
     */
    protected $db;
    /**
     * @param LoggerInterface $logger
     * @param Twig $view
     * @param PDO $db
     */
    public function __construct(
        LoggerInterface $logger,
        Twig $twig,
        \PDO $db
    ) {
        $this->logger = $logger;
        $this->view = $twig;
        $this->db = $db;
    }

src/Application/Actions/User/UserAction.php

    /**
     * @param LoggerInterface $logger
     * @param Twig $view
     * @param PDO $db
     * @param UserRepository  $userRepository
     */
    public function __construct(LoggerInterface $logger, Twig $view, \PDO $db, UserRepository $userRepository)
    {
        parent::__construct($logger, $view, $db);
        $this->userRepository = $userRepository;
    }

src/Application/Actions/User/ListUsersAction.php

        $sql = 'SELECT * FROM test';
        $sth = $this->db->prepare($sql);
        $sth->execute();
        $row = $sth->fetch();

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-09-19 (日) 19:09:27