2016年10月27日木曜日

cakephp3 phpunit 利用時に使える便利なmethodなどについて

PHP Ver 5.6.27
CakePHP Ver 3.1.9


公式ページを見れば記載があるが、少しわかりにくいのでPHPUnitで利用されるファイルやメソッドについて書いておく。


Fixtures:
実際のアプリケーションに使われているデータを破壊することなく テストができる
 ・各フィクスチャで必要なテーブルを作成します
 ・フィクスチャにデータが存在すれば、それをテーブルに投入します
 ・テストメソッドを実行します
 ・フィクスチャのテーブルを空にします
 ・データベースからフィクスチャのテーブルを削除します

記述例(xxxControllerTest.php)
---------------------------------------------------
public $fixtures = [ 'app.user', 'app.article' ];
---------------------------------------------------


setUp method:
テストメソッドの前に毎回呼び出されます
テストされるオブジェクトの生成や、テストのためのデータの初期化に使われます
メールなどの設定はここに記述すると便利
※parent::setUp() を呼び出すことを忘れないでください

記述例(xxxControllerTest.php)
---------------------------------------------------
public function setUp() {
  parent::setUp();

  Email::dropTransport('default');
  Email::configTransport('default', [ 'className' => 'Debug', ]);
}
---------------------------------------------------


tearDown method:
テストメソッドの後に毎回呼び出されます
テストが完了した後のクリーンアップに使われます
※parent::tearDown() を呼び出すことを忘れないでください

記述例 (xxxControllerTest.php)
---------------------------------------------------
public function tearDown() {
  parent::tearDown();
}
---------------------------------------------------


setupBeforeClass method:
クラスのテストメソッドを実行する前に一度だけ呼ばれます
※このメソッドは static でなければなりません

記述例 (xxxControllerTest.php)
---------------------------------------------------
public static function setupBeforeClass() {
  parent::setupBeforeClass();
}
---------------------------------------------------


tearDownAfterClass method: 
クラスのテストメソッドをすべて実行した後に一度だけ呼ばれます
※このメソッドは static でなければなりません

記述例 (xxxControllerTest.php)
---------------------------------------------------
public static function tearDownAfterClass() {
  parent::tearDownAfterClass();
}
---------------------------------------------------

2016年10月13日木曜日

cakephp3 pagenation & meta tag

PHP Ver 5.6.27
CakePHP Ver 3.1.9


ページネーション処理は、Cakephpのデフォルトで準備がされている

まずは、ページネーション使いますよとAppViewのinitializeメソッドで設定

---------------------------------------------------

$this->loadHelper('Paginator');

---------------------------------------------------


Controllerのinitializeメソッド内などで、ページネーションの詳細設定を行う

---------------------------------------------------

$this->loadComponent('Paginator');
$this->paginate = [
                'limit' => 10
        ];

---------------------------------------------------


limitなどはロードした後に設定

では実際に使ってみる
DBから取得してきたqueryをページネーションを使って表示

---------------------------------------------------

$this->set('articles', $this->Paginator->paginate($article->getArticlesQuery(), $this->paginate));

---------------------------------------------------


その後Viewでは気にせず普通にイテレーションしてあげればよい
但し、以下の表示は入れてあげないとページ番号が出てこないので注意

---------------------------------------------------

<?= $this->Paginator->numbers() ?>

---------------------------------------------------

ここで記述した内容はあくまで一例で、参考程度に。

詳しくは、以下参照

http://book.cakephp.org/3.0/ja/controllers/components/pagination.html


備考
rel=prevやrel=nextも自動でやってくれる
Viewファイル内で以下のようにheadタグの中に記述

---------------------------------------------------

<?= $this->Paginator->meta() ?>

---------------------------------------------------

これだけ。便利ですね~