タグ

CakePHPに関するsatoshieのブックマーク (45)

  • CakePHP + MySQL アプリのテスト時間を 72% 削減した話

    この記事は CakePHP Advent Calendar 2018 の23日目の記事です。 CakePHP アプリケーションのユニットテストでボトルネックになりがちなのがデータベースへのディスク I/O 時間ですが、そういったプロジェクトでは FriendsOfCake/fixturize プラグイン を導入すると大幅に高速化できる可能性があります。 GitHub – FriendsOfCake/fixturize: CakePHP3: Improve performance of your fixture based tests on MySQL. 実例として、テストに18分も掛かっていた MySQL を使ったプロジェクトありましたが、導入後なんと5分にまで短縮されました。(約 72% の高速化🎉) 結果として早いサイクルで CI を回せるようになり開発スピードも上がりました。 何が

    CakePHP + MySQL アプリのテスト時間を 72% 削減した話
  • CakePHP Fixture Factories を導入しました - コネヒト開発者ブログ

    こんにちは。プロダクト開発部の @su-kun1899 です。 今回はママリの CakePHP アプリケーションに Fixture Factories を導入した事例を紹介します。 Fixture Factories とは何か Fixture Factories は、モデルやデータベースに依存するテストコードにおいて、テーブルの作成やデータ初期化を行うためのプラグインです。 github.com CakePHP には元々 Fixture という仕組みが提供されていますが、 Fixture Factories はより柔軟に扱うことができます。 https://book.cakephp.org/4/en/development/testing.html#test-fixtures 導入したきっかけ アプリケーションの規模が大きくなり、機能が増えてくると、テーブル(モデル)ごとに一律データを管理

    CakePHP Fixture Factories を導入しました - コネヒト開発者ブログ
  • CakePHPにIDE Helperを導入しIDE補完で開発効率を上げる⚡️【CI連携】 - Qiita

    こんにちは、みやがわです。 CakePHPで開発を行う上で必ず導入したいライブラリの一つである IDE Helper をご紹介します。 環境 CakePHP: 4.4.15 ( 3版もあります ) PHP: 8.1.20 IDE Helperとは IDE Helperとはその名の通りIDEやエディタを補助するためのプラグインで、主に補完の面でサポートします。 PHPの言語仕様に対応しているIDEでは最初からある程度の補完はされますが、扱うフレームワークがマジックメソッドを持っていたり特殊なインスタンス参照を行っている場合には適切な補完を表示することが出来ません。 CakePHPの場合、そういった補完を適切に表示するためにはクラスのPHPDocに対して @propertyタグを追加する必要があります。 例) $this→loadComponent() で読み込んだクラスの補完を効かせるために

    CakePHPにIDE Helperを導入しIDE補完で開発効率を上げる⚡️【CI連携】 - Qiita
  • CakePHP 4 で一部のコントローラを別フォルダに設置する方法 / Twin Turbo Computing

    はじめに CakePHP 4 は MVC モデルが採用されているフレームワークで、各種ファイルを格納するフォルダが明確にされています。 また CakePHP 4 には Ajax や Web API 用の機能も充実しているのですが、それらの機能も通常のアクションと同じように Controller に書きます。 例えば通常のアクションと Ajax 用アクションが共存するシステムの場合、コントローラの肥大化防止策としてファイル分割が考えられます。 しかし、次の悩みとして Controller フォルダ内のファイルが増えてしまい、作業効率が低下する可能性が出てきます。 そこで今日は CakePHP 4 で一部のコントローラを別のフォルダに設置する方法をご紹介します。 /src/Controller フォルダの移動ではなく、コントローラの一部を別フォルダに移動です。 動作確認に使用したのは Cake

  • PHP8.1アップデートまでの道のり - コネヒト開発者ブログ

    こんにちは。コネヒトでバックエンドエンジニアをしております@homiTakahashiです。 今回は私たちの使用している言語PHPの8.1バージョンまでアップデートについて話していけたらと思います。 前提として私たちのアップデートしたいプロジェクトは以下のような環境です。 PHP7.4 フレームワークはCakePHP4.2 dockerを使用 BaseImageはalpine そこでPHP8.1にする上でCakePHP4.2→4.3にバージョンを上げないといけないことが分かり段階を踏むように以下のように進めました。 作業手順 1. DockerImageを変更する PHPのバージョンを指定し、dockerでコンテナが安定して起動するようにエラー文を読みながら対応していきます。alpineのバージョンは古いとPHP8.1に対応していないのでバージョンを上げる必要がありました。 FROM al

    PHP8.1アップデートまでの道のり - コネヒト開発者ブログ
  • [CakePHP2] カスタムファインダーの使い方と利便性 - Qiita

    カスタムファインダーとは カスタムファインダー とは Model が提供するファインダーの中で find('all') でも find('first') でも find('list') でも find('count') でも find('threaded') でも find('neighbors') でもない独自のファインダーのことです。 たとえば、データベース中から有効なユーザーのみを取得したいとします。こうした場合にカスタムファインダーを活用することができます。頻繁に使用する検索条件であればコードの重複を削減できますし、そうではなくて、あるアクション固有の処理だったとしても CakePHP ではコントローラーをスリムにしてモデルを太らせるのが鉄則 1 です。 カスタムファインダーを作成する では、さっそくカスタムファインダーを作ってみましょう。有効なユーザーのみを取得する find('

    [CakePHP2] カスタムファインダーの使い方と利便性 - Qiita
  • [CakePHP3]現場で使えるCollectionクラスの15選 - Qiita

    CakePHP Advent Calendar 2017、第4日目です! 私は最近だとCake3を利用しているのですが、触っていた期間でいうとまだまだCake2の方が長い〜と思います。 なので、昨日のカスタムファインダーのエントリはとても興味深かったです・・・数えるほどしか使ってない(書いていない)機能だったので、改めて理解した上で機会があれば活用してみたいと思いました。 Collection の話をします! さて、今回はCakePHP3の話になります。 もともとCake2からHashクラスは大好きなのですが、Collectionは同じく「集合をよしなに扱う便利クラス」になります。 ORM層に見られるように「プリミティブな連想配列を脱却した良さを分かち合おう」というCake3時代の思想を、色濃く感じることができる場面です。 ドキュメントはこちら: https://book.cakephp.

    [CakePHP3]現場で使えるCollectionクラスの15選 - Qiita
  • CakePHP4.4でErrorHandler (ConsoleErrorHandler)は非推奨

    この記事はコネヒトアドベントカレンダー2022の14日目の記事です。 コネヒトでは現在社内の各プロジェクトPHPのバージョンを上げることを目標の一つとして設定しています。 それに伴い主に使用しているPHPフレームワークのCakePHPも同時並行でバージョンを上げていってます。 今回はPHPではなく現時点でのCakePHPの最新バージョンの4.4で非推奨になったErrorHandler(ConsoleErrorHandler)、そしてExceptionTrap と ErrorTrapが登場した経緯を少し紹介したいと思います。 この変更が行われた理由は下記のissueで詳しく説明されていますが、ざっくりと言うと下記の様な動機があるらしいです(英語に自信がないので詳しくはissueのリンクを貼っておくので詳しく知りたい方はそちらからどうぞ!) エラーハンドリングを担当するクラスと例外の描画を担

    CakePHP4.4でErrorHandler (ConsoleErrorHandler)は非推奨
  • 【CakePHP3】バリデーション・アプリケーションルールについて - Qiita

    社内用にまとめた内容の転載。 ココらへんの話をします CakePHP3の値チェックは2段階! ValidationとValidation Provider Application Rules Entityに渡す値のチェック(検証)は2段階で行われる CakePHP3では、従来とは大幅に「バリデーション」の機構が変更されました。 これまでModel::save()やModel::delete()時に暗示的に、もしくは明示的にModel::validate()をした際に走っていたデータの検証が、次のような2ステップに分けて扱われます。 Entity作成・更新時に行われる「validation」 Databaseに作用する(insert, update, delete)際に行われる「(application | domain) Rule」 この変化はパッと見とっつきにくいし、 なんぞ…という感じ

    【CakePHP3】バリデーション・アプリケーションルールについて - Qiita
  • cake PHP3 条件付きルールを使用する | クロジカ

    ホーム / ハック / cake PHP3 条件付きルールを使用する

    cake PHP3 条件付きルールを使用する | クロジカ
  • 【CakePHP】バリデーションメソッドをまとめた - Qiita

    #はじめに# CakePHP(3.8)のバリデーションメソッドまとめです。 バリデーションの基は、Validationクラスのインスタンスに、チェーンメソッドで適応したルールを記述していきます。 use Cake\Validation\Validator; $validator = new Validator(); $validator ->requirePresence('age') ->notEmpty('age', 'このフィールドに入力してください') ->nonNegativeInteger('age', '年齢は数字で入力してください。') Validatorクラスは、基的にはValidationクラスのラッパーになっています。(例外もあります) そのため、実際にどのような処理が行われるかを知るためには、Validationクラスを覗く必要があります。 public fun

    【CakePHP】バリデーションメソッドをまとめた - Qiita
  • CakePHP3のChronosの機能紹介 - Qiita

    CakePHP3のChronosの公式ドキュメントを翻訳したので、 その機能についてご紹介します。 以前の記事CakePHP3公式ドキュメントの翻訳が一石N鳥だった件でもご紹介しましたが、 私は「CakePHP3翻訳会」への参加を通じて翻訳を行なっていて、 その中のひとつとしてChronosを翻訳しました。 Chronosとは Chronosは、CakePHP3.2から導入された、日付時刻を扱うライブラリです。 公式のリリースには以下のように書いてあります。 Carbon ライブラリを Chronos に置き換え Carbon ライブラリは cakephp/chronos に置き換えられました。この新しいライブラリは Carbon のフォークで、依存関係は追加されていません。カレンダーのdateオブジェクト、イミュータブルなdateオブジェクトとdatetimeオブジェクトを提供します。

    CakePHP3のChronosの機能紹介 - Qiita
  • cakephp3 カスタムバリデーションを簡易的に実装する方法

    CakePHP3のカスタムバリデーションの実装方法の一例 バリデーションファイルを作成する方が汎用性が高いルールとして設置できる CakePHP3では、あらかじめ用意されたバリデーションのルール以外のオリジナルのバリデーションを行いたい場合の方法がいくつか用意されています。 ブログなどでよく紹介されているのは、 /src/Model/Validation/CustomValidation.php ファイルを作成し、その中にバリデーションルールを作成して、それを呼び出す、というような方法です。 この方法は、汎用性が高く、複数のテーブルクラスで利用することができる有用な方法です。 ですが、今回は、他の処理では使わないであろう、と思われるバリデーションルールを、テーブルクラス内に簡単に記述する、という方法の紹介です。 テーブルファイル内に処理する関数も記述する方法 具体的には、下記の後半部分がオ

    cakephp3 カスタムバリデーションを簡易的に実装する方法
  • CakePHP でカスタム Validation を追加しやすくする #cakephp - ジムには乗りたい

    概要 CakePHP には独自に定義したカスタム Validation を使う方法がいくつかある。 Default のバリデーションプロバイダーを差し替えることで、アプリケーション全体で使うようなルールを追加しやすくする。 例えば「会員IDは 0 埋めを含む8桁の数字」のようなカスタムバリデーションを使う場合、下記のような形で呼び出せるようにする。 $validator = new AppValidator(); $validator->memberId('member_id', 'member_id は8桁の数字で指定してください'); Validation を拡張したクラスを作る Validation を拡張して、カスタム Validation を追加するための独自クラスを作る。 Cake\Validation\Validation を拡張することで、既存のチェック処理を直接的にも間接

    CakePHP でカスタム Validation を追加しやすくする #cakephp - ジムには乗りたい
  • 既存プロダクトのCakePHPのアップグレード戦略 - コネヒト開発者ブログ

    既存プロダクトのCakePHPのアップグレード戦略 こんにちは。サーバーサイドエンジニアをやっている西中です。 花粉症に悩まされているので最近空気清浄機を購入しました。こころなしか症状が緩和している気がしています。 前回はCakePHP4.3にアップグレードする際に躓きがちなphpunitの変更ポイントをいくつか紹介させていただきました。 実はこのCakePHPのアップグレード対応は段階的に行っていました。 CakePHP段階的なアップグレード対応 私が携わっているこのプロダクトは2018年11月にリリースされました。 リリースした時点ではCakePHPのバージョンは3.6でした。 いきなりCakePHP3.xからCakePHP4に上げてしまうとアップグレード対応の差分が大きくなってしまい、対応に時間がかかってしまうという問題があるため、段階的にアップグレード対応しようという判断になりまし

    既存プロダクトのCakePHPのアップグレード戦略 - コネヒト開発者ブログ
  • CakePHP4でRoutingのテスト - kaz29

    最近React+TypeScriptばかりで、CakePHPのコードはあまり書いていないわたなべです。 Routingのテスト CakePHP1の頃の新原さんのブログ(なんと2009-05-25の記事、11年前!?)でも書かれているように、routes.phpの設定変更は、思わぬバグを出す可能性があるので、UnitTestでの動作確認は必須だと思っています。 CakePHP3までは、以下のような感じでテストできていましたが、CakePHP4でRoutingがmiddleware化した影響などでそのままでは動作しません。 <?php declare(strict_types=1); ... use Cake\Network\Request; ... public function testRouting($request, $expected) { $request = new Reques

    CakePHP4でRoutingのテスト - kaz29
  • 資産価値の高いテストを書くためにFabricateを使い始めました - BASEプロダクトチームブログ

    Product Dev Divisionの川島(@nazonohito51)です。 BASEでは創業当時よりCakePHPによるWebアプリケーション開発を行っており、同時にそのテストも充実させてきました。ですがその過程で気づくのは、CakePHP標準の仕組みだけではテストを増やせば増やすほどテストデータの管理が難しくなり、テストをメンテナンスするのが困難になる問題でした。きちんと長期的にサービスを良くしてくれる資産価値の高いテストが書けるように、今回はその問題と向き合い、解決するために@sizuhikoさんの開発されたFabricateというライブラリを導入したお話を書かせていただこうかと思います。 BASEの直面した課題 CakePHP2のFixtureという仕組み 詳細は公式ページを参照していただきたいのですが、CakePHP2にはテストデータを作るためのFixtureという仕組みが

    資産価値の高いテストを書くためにFabricateを使い始めました - BASEプロダクトチームブログ
  • CakePHP4 で Fabricate を使ったテストを書く - Qiita

    資産価値の高いテストを書くためにFabricateを使い始めました この記事はとても共感出来る記事です。 開発作業の最初や途中で UnitTest を入れるぞっと盛り上がったときは、テストを書くのですが、後ほど負担になって UnitTest を実行しなくなるっというケースが多々あります。 (特にフェーズ1リリースが終わって、次の開発まで期間があく案件のケースで多発します。。。) 今後、良いテストを書くために CakePHP4 で Fabricate を導入する手順を残します。 この記事でわかること CakePHP4 へ Fabricate を導入する手順。 この記事内のソースは以下で公開しています。 https://github.com/katsuhiko/cakephp-vue-study 事前準備 CakePHP4 プロジェクトは以下の記事で作成して、Docker で動かしつつ、最低限

    CakePHP4 で Fabricate を使ったテストを書く - Qiita
  • ORM order句でfieldを使ったソート - Qiita

    $test = $this->Hoge ->find() ->order([ 'field(id, 3, 5, 7)' => 'DESC' ]); order句の連想配列は、keyがソート対象、valueがソート条件となっています。 fieldの第一引数には、ソート対象とするカラムを指定します。 今回の場合、idを対象としています。 第二引数以降は、第一引数に指定したカラムに存在する値を指定します。 今回はidカラムに存在する3,5,7を対象としています。

    ORM order句でfieldを使ったソート - Qiita
  • CakePHP3のFormHelper入門編&フォームHTML出力を独自テンプレートで行う

    rito Backend EngineerTokyo, JapanPHP 5 技術者認定上級試験 認定者AWS Certified Solutions Architect - Associate統計検定 3 級

    CakePHP3のFormHelper入門編&フォームHTML出力を独自テンプレートで行う