はじめに
Slim3 Framework×slim-skeleton不使用×twigでプロジェクトを作成する
(2. DocumentRoot変更~Twigを使用)の続きです。
前提
下記記事で構築した環境を前提とします。
手順
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! [] []
日付と出力形式を追加します。
$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
に追加した日付と出力形式を有効にするための記載が追加されています。
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
に下記ルートを追加します。
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です。
- ブラウザに
Success
と表示される。 - ログファイル
tmp/logs/app-2020-07-09.log
が生成される。 -
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には以下のように記述します。
<?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にルートを追加
$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すると動かないので省きました。
<?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
に下記設定を追加します。
$container[\App\Action\HomeIndexAction::class] = function (Container $container) {
$twig = $container->get(\Slim\Views\Twig::class);
return new \App\Action\HomeIndexAction($twig);
};
routes.phpにルートを追加
$app->get('/home', \App\Action\HomeIndexAction::class);
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をインストール
PHP Slim3フレームワークのサンプルアプリを作ろう
2-1. First Application Walkthrough Getting Set Upまで
Apache
Slim3 Framework×slim-skeleton不使用×twigでプロジェクトを作成する
1. プロジェクト作成~各種設定
2. DocumentRoot変更~Twigを使用
3. LoggingとController
4.PDO使用
5. チケット管理システムを再現➀
6. チケット管理システムを再現➁