LoginSignup
0
0

More than 3 years have passed since last update.

Slim3 Framework×slim-skeleton不使用×twigでプロジェクトを作成する(3. LoggingとController)

Last updated at Posted at 2020-07-09

はじめに

Slim3 Framework×slim-skeleton不使用×twigでプロジェクトを作成する
(2. DocumentRoot変更~Twigを使用)
の続きです。

前提

下記記事で構築した環境を前提とします。

  • Windows10にVagrantをを入れてCentOS7をインストールしよう(123456)
  • ローカルでLAMP環境を構築しよう(01234
  • CentOS7にComposerをインストールしよう

  • 私家版 Slim Framework チュートリアル (123456)
    @nunulkさんのチュートリアルを一通り。
    ここで作成したDBを使いまわします。

  • Slim3 Framework×slim-skeleton不使用×twigでプロジェクトを作成する(12

手順

1. 専用のユーザーを作成
2. プロジェクトディレクトリを作成・slim3インストール
3. 各種設定
4. DocumentRootを変更&表示確認
5. Twigを使ってみよう
6. Loggingしてみよう
7. Controllerを作成しよう
8. PDOを使用してデータベースに接続しよう
9. @nunulkさんのチュートリアルで作成したチケット管理システムをtwigを使って再現しよう

やってみよう

今回の記事では、手順6~7を行います。

6. Loggingしてみよう

monologインストール

以下のコマンドでmonologをインストールします。

composer require monolog/monolog

settings.phpに設定を追加

config/settings.phpに下記設定を追加します。
ダニエルさんのサイトの記述のままだと、エラーログの日付が下記みたいになってしまうので、
[2020-07-09T06:09:09.183042+00:00] app.ERROR: My error message! [] []
日付と出力形式を追加します。

config/settings.php
$settings['logger'] = [
  'name'        => 'app',
  'file'        => $settings['temp'] . '/logs/app.log',
  'level'       => \Monolog\Logger::ERROR,
  'date_format' => 'Y-m-d H:i:s',
  'output'      => "[%datetime%] %level_name%: %message% %context% %extra%\n",
];

container.phpに設定を追加

config/container.phpに下記設定を追加します。
こちらもconfig/settings.phpに追加した日付と出力形式を有効にするための記載が追加されています。

config/container.php
use Monolog\Formatter\LineFormatter;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Logger;
use Psr\Log\LoggerInterface;

$container[LoggerInterface::class] = function (Container $container) {
    $settings = $container->get('settings')['logger'];
    $level = isset($settings['level']) ? $settings['level'] : Logger::ERROR;
    $logFile = $settings['file'];
    $date_format = $settings['date_format'];
    $output = $settings['output'];
    $formatter = new LineFormatter($output, $date_format);

    $logger = new Logger($settings['name']);
    $handler = new RotatingFileHandler($logFile, 0, $level, true, 0775);
    $handler->setFormatter($formatter);
    $logger->pushHandler($handler);

    return $logger;
};

routes.phpにルートを追加

config/routes.phpに下記ルートを追加します。

config/routes.php
use Psr\Log\LoggerInterface;

$app->get('/logger-test', function (Request $request, Response $response) {
    /** @var Container $this */
    /** @var LoggerInterface $logger */

    $logger = $this->get(LoggerInterface::class);
    $logger->error('My error message!');

    $response->getBody()->write("Success");

    return $response;
});

動作確認

ブラウザで以下のURLを開いてください。以下が確認できればOKです。
1. ブラウザにSuccessと表示される。
2. ログファイルtmp/logs/app-2020-07-09.logが生成される。
3. tmp/logs/app-2020-07-09.logに下記例のようなエラーログが記載されている。
例)[2020-07-09 06:42:56] ERROR: My error message! [] []

http://192.168.33.90/logger-test

7. Controllerを作成しよう

リクエストとレスポンスを処理するためのパブリックメソッドを1つだけ与えるSingle Action Controllersと
依存性の注入を行うDependency injectionの2パターンのControllerクラスを作成します。
ダニエルさんはControllerクラスといいながらクラスの命名を××Actionクラスとしているので、そこは踏襲します。

Single Action Controllers

PingAction.php作成

srcディレクトリの下にActionディレクトリを作成し、PingAction.phpというファイルを作成します。
PingAction.phpには以下のように記述します。

src/Action/PingAction.php
<?php

namespace App\Action;

use Psr\Http\Message\ResponseInterface;
use Slim\Http\Request;
use Slim\Http\Response;

final class PingAction
{
    public function __invoke(Request $request, Response $response): ResponseInterface
    {
        return $response->withJson(['success' => true]);
    }
}

routes.phpにルートを追加

config/routes.php
$app->any('/ping', \App\Action\PingAction::class);

動作確認

ブラウザで以下のURLを開き、{"success":true}と表示されればOKです。

http://192.168.33.90/ping

Dependency injection

HomeIndexAction.php作成

src/Action/HomeIndexAction.phpというファイルを作成し、以下のように記述します。
ダニエルさんはActionInterfaceクラスをimplementするようなことを書いてあったのですが、
implementすると動かないので省きました。

src/Action/HomeIndexAction.php
<?php

namespace App\Action;

use Psr\Http\Message\ResponseInterface;
use Slim\Http\Request;
use Slim\Http\Response;
use Slim\Views\Twig;

final class HomeIndexAction
{
    /**
     * @var Twig
     */
    private $twig;

    /**
     * Constructor.
     *
     * @param Twig $twig
     */
    public function __construct(Twig $twig)
    {
        $this->twig = $twig;
    }

    /**
     * Action.
     *
     * @param Request $request the request
     * @param Response $response the response
     *
     * @return ResponseInterface the response
     */
    public function __invoke(Request $request, Response $response): ResponseInterface
    {
        $viewData = [
            'name' => 'World',
        ];

        return $this->twig->render($response, 'Home/home-index.twig', $viewData);
    }
}

container.phpに設定を追加

config/container.phpに下記設定を追加します。

config/container.php
$container[\App\Action\HomeIndexAction::class] = function (Container $container) {
    $twig = $container->get(\Slim\Views\Twig::class);
    return new \App\Action\HomeIndexAction($twig);
};

routes.phpにルートを追加

config/routes.php
$app->get('/home', \App\Action\HomeIndexAction::class);

home-index.twigを作成

templateディレクトリの下にHomeディレクトリを作成し、その下にhome-index.twigを作成します。
template/Home/home-index.twigには以下のように記述します。

template/Home/home-index.twig
Hello {{ name }}!

動作確認

ブラウザで以下のURLを開き、Hello World!と表示されればOKです。

http://192.168.33.90/home

参考サイト

Creating your first Slim 3 Framework Application
PHP monologをカスタマイズしてみた

関連ページ

Windows10にVagrantをを入れてCentOS7をインストールしよう

1. VagrantインストールからVagrantfileを設置まで
2. 仮想マシンの操作
3. WinSCP、Tera Termに秘密鍵でログイン
4. WinSCP、Tera Termにrootユーザーでパスワードログイン
5. zip/unzipをインストール
6. Vagrantにて仮想環境を配布

ローカルでLAMP環境を構築しよう

0. 事前準備
1. Apacheをインストール
2. MySQLをインストール
3. PHPをインストール
4. ファイアウォールとか停止する

Composerをインストール

CentOS7にComposerをインストールしよう

PHP Slim3フレームワークのサンプルアプリを作ろう

2-1. First Application Walkthrough Getting Set Upまで

Apache

DocumentRootを変更しよう

Slim3 Framework×slim-skeleton不使用×twigでプロジェクトを作成する

1. プロジェクト作成~各種設定
2. DocumentRoot変更~Twigを使用
3. LoggingとController
4.PDO使用
5. チケット管理システムを再現➀
6. チケット管理システムを再現➁

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0