TestRailAPIException: TestRail API returned HTTP 308 (No additional error message received)

TestRailのAPI試してみた。
TestRail API (v2) [TestRail Documentation]読みながらphp実行してみたらエラー

<?php
require 'testrail/testrail.php';

$client = new TestRailAPIClient('http://XXXX.testrail.com/');
$client->set_user('user@mail.address');
$client->set_password('password');

$case = $client->send_get('get_case/1');
var_dump($case);
TestRailAPIException: TestRail API returned HTTP 308 (No additional error message received)

308ってあんまり見たことないなーって調べたけどあんまりよくわからなかったです。まる。

解決策はhttpではなくhttpsにしろってこと。stack overflowは何でも知ってるね。 stackoverflow.com

<?php
require 'testrail/testrail.php';

$client = new TestRailAPIClient('https://XXXX.testrail.com/');
$client->set_user('user@mail.address');
$client->set_password('password');

$case = $client->send_get('get_case/1');
var_dump($case);

で無事レスポンス取れた。

gurock社ドキュメントメンテしてくれー。

PHPUnitでクラスに入っていない関数のテスト

プログラマじゃないのにPHPUnit導入の調査をしなきゃいけなくて、ずーっと疑問だったのがやっとわかったので書いておく。

<?php
// function.php

function sample($x,$y)
{
    return $x + $y;
}
<?php
// FunctionTest.php

use PHPUnit\Framework\TestCase;

class FunctionTest extends TestCase
{
    public function testSample()
    {
        require_once 'function.php';
        $this->assertEquals(5,sample(2,3));
    }
}

普通にクラス呼ばないで関数書けばok。
テストケースのファイル名とかクラス名とかは何でも大丈夫。
と思ったけど、なにか不都合あれば追記する。

雑記

自分がずっと前に作ったオブジェクト指向に全くなっていないプログラムのテスト書いてたんだけど超楽しい!
疎結合でモックとかいらない関数だけ選んで書いてた。 モックとか作らないといけないやつは面倒なんだろうなぁ…。

あと、そもそもnamespaceuseのことを全然理解してなかったんだけど、
いまだにuseでクラスの読み込みができるの不思議…。
なんでrequire系のやついらないの?どうやって探してるの?って。
あとでちゃんとマニュアル読もう。

Laravelのお勉強2

4-1 ミドルウェア

コントローラの処理前後に実行される処理。
前処理は$next($request)を返し、後処理は$responseを返す。
php artisan make:middleware (クラス名)でHttp/Middleware内に雛形が作られる。
それに処理を書いたら 1. routes/web.phpuse (ミドルウェアのクラス)を追加 2. ルート情報の後ろにメソッドチェーンで追加。route::get()->middleware(ミドルウェア::class);

p118 グローバルミドルウェア

特定のリクエストだけでなく、すべてのリクエストにミドルウェアを挟むときに使う。
Http/Kernel.php内の$middleware = [];ミドルウェアを追加すると、routes/web.appに書かなくても実行されるようになる。
(use文もいらないっぽい)

p119 ミドルウェアのグループ登録

Kernel.php$middlewareGorupsに新しくキーを追加して、その中にミドルウェアを指定する。
public/web.phpのルート情報に普通にミドルウェアを使うのと同じように追加する。
Route::get()->middleware('ミドルウェアのグループ名');

❯ php artisan --version
Laravel Framework 5.4.36

Laravelのお勉強

blade

p92コンポーネントとサブビュー

コンポーネント@component('コンポーネント') @endcomponentで指定。
コンポーネントに変数があるときは@slot('変数名')で指定する。

サブビューは@include('テンプレート名',値の配列)で指定。 コンポーネントの簡易版的な?@slot()いらないし1行で書ける。

p96 @eachディレクティブ

@each('コンポーネント',配列,キー)のように書くと、コンポーネントのテンプレで配列の内容を全部表示してくれるディレクティブ

3-5 ビューコンポーザ

ビューにビジネスロジックをもたせたいとき用に用意された仕組み。
コントローラ→ビューテンプレートの間にブートストラップ処理(割り込み)する。
コントローラに書いてないことを追加したり値を編集したりできる。
コンポーザクラスは場所が用意されてないのでhttp内に作る。
コントローラから見えないのでデバッグしづらそう…。

  • サービスプロバイダを用意(artisan make:provider)してboot()に処理を書く
  • app¥config¥app.php'providers'=>[];に登録

PostgreSQLでnow()をyyyy-mm-dd hh24:mi:ssのtimestamp型にする方法

結論

select date_trunc('second',now()::timestamp);
メモ

date_trunc()
https://www.postgresql.jp/document/7.2/user/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC

postgreSQLはfrom句なしで結果返ってくるの知らなかった!
超便利♡

Visual Studio Codeで*.blade.phpをhtmlみたいに扱う設定

シンタックスハイライトとか入力補完とか。

設定

メニューバーのCode > 基本設定 > 設定

検索から↓の設定をひっかけて左の鉛筆マーク

  // 言語に対するファイルの関連付け (例 "*.extension": "html") を構成します。これらの関連付けは、インストールされている言語の既定の関連付けより優先されます。
  "files.associations": {},

右のエリアで↓みたいに書き換えて保存

    "files.associations": {
        "*.blade.php":"html"
    }

副作用とかあったら追記する。

GithubにLaravelの勉強用リポジトリ作る

Write code everyday の芝に憧れてGit管理したくなった(単純)

勉強する書籍は↓。
今回関係ないけど。

PHPフレームワーク Laravel入門

PHPフレームワーク Laravel入門

すでにちょっと進めてしまったので、途中からGithubに入れることに

最初は下記の記事を見ながら設定
めっちゃわかりやすくて細かく書いてあってすごく助かった!

employment.en-japan.com

それから途中からGitにする方法は下記の記事を参考に。

willow710kut.hatenablog.com

しかしエラーが出てしまったので下記の記事を参考にしたらpushできた!

初めてGitHubリポジトリにpushしたらrejectedエラーになったときの対応メモ

インターネットは偉大。
先人に感謝。