Slim 3 Framework でログ出力したりQueryパラメータひろったり。その3

2 min read読了の目安(約2500字

その2で

Slim-Skeleton を導入してから肉付けが楽しい今日このごろ。回り道が多かったけどなんとなく理解できてきたんで。そろそろ本格的にプログラムしてみようかなとw。

ログ出力に monolog が使える

Slim-Skeleton を導入すると monolog が使えるので楽ちん。src/settings.php に設定されているので簡単に使える。

src/settings.php
  'logger' => [
    'name' => 'slim-app',
    'path' => __DIR__ . '/../logs/app.log',
    'level' => \Monolog\Logger::DEBUG,
  ],

使い方は下記みたいに使えばok。詳しくはソースみてもいいかも。vendor/monolog/monolog/src/Monolog/Logger.php

$this->logger->addDebug('log');
$this->logger->addInfo('log');
$this->logger->addWarning('log');

Queryパラメータを取得

slimには、method として GET, PUT やら普通にhttpのmethodがあるわけですが、ちょっと面白いのが map つーやつ。こいつ複数のmethodを一つでうけることができる優れもので、まあしないだろうけど GET/POST両方おなじuriで受けるときに便利に使えそう。

$app->map(['GET', 'POST'], '/books', function (Request $request, $response, $args) {

とりあえずこんな感じで使ってみる。

$app->map(['GET', 'POST'], '/test_param', function ($request, $response, $args) {
  $method = $request->getMethod();
  $uri = $request->getUri();

  // get/post
  if ($request->isGet() == 1) {
    echo "<br> isGet!! <br>";
    $allGetVars = $request->getQueryParams();
    foreach($allGetVars as $key => $param){
      //GET parameters list
      echo $param . "<br>";
    }
    //Single GET parameter
    $getParam = $allGetVars['name'];
    echo "<br> get name : " . $getParam . "<br>";
  } else {
    echo "<br> isPost!! <br>";
    $allPostPutVars = $request->getParsedBody();
    foreach($allPostPutVars as $key => $param){
      //POST or PUT parameters list
      echo $param . "<br>";
    }
    //Single POST/PUT parameter
    $getParam = $allPostPutVars['name'];
    echo "<br> post name : " . $getParam . "<br>";
  }
}

getMethod() getUri() は、Slim Request を参照するとよい。

で、簡単なフォームを作って試してみる。

<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>sample</title>
 </head>
<body>
 <form action="http://ホストip:8080/test_param" method="post">
  名前:<br />
  <input type="text" name="name" size="30" value="" /><br />
  メールアドレス:<br />
  <input type="text" name="mail" size="30" value="" /><br />
  コメント:<br />
  <textarea name="comment" cols="30" rows="5"></textarea><br />
  <br />
  <input type="submit" value="登録する" />
 </form>
</body>
</html>

get/post両方に対応できるやん。簡単すなw

これで簡単なアプリつくれそーだw
次は、パラメータ受け取って色々なQueryを書いてみる。