PHPで記述されたwebアプリケーションフレームワーク。 Ruby on Railsの影響を受けている。 1.x系に対応するPHPのバージョンは4または5。 2.x系はPHP5への最適化を図るため、PHP4への対応が打ち切られるとともに、例外処理、テスト、命名規則など大幅な改修がなされた。 2013年1月15日現在の最新版は2.2.4、対応するPHPのバージョンは5.2.8以上である。
弊社で毎月開催し、PHPエンジニアの間でご好評をいただいているPHP TechCafe。 2022年11月のイベントでは「PHPフレームワーク」について語り合いました。 弊社メンバーがピックアップしたPHPの代表的なフレームワーク4種について、以下のShowNoteをベースに、参加者の皆様のご意見も伺いながら学んでいきました。今回はその内容についてレポートします。 rakus.connpass.com hackmd.io フレームワークとは 代表的なPHPフレームワーク Laravel Symfony CakePHP Slim 機能比較 ルーティング Laravel Symfony CakeP…
CakePHPの例外処理は、ユニットテストでテスト可能です。 例えば、テストコードは以下のようになります。 testServiceClassTest.php <?php < 中略 > public function test_dummy() { $this->setExpectedExceptionRegExp('CakeException', '/テストの例外メッセージです。/'); $service = new testServiceClass(); $service->dummy(); } 実際の処理内容は以下の通りです。 testServiceClass.php <?php publi…
CakePHP CakePHPでフォームを実装する場合、Formヘルパーを使用することが多いと思います。 book.cakephp.org このFormヘルパーで数値フォームを実装する際に、入力値の桁数を制限したい、というのが今回の趣旨です。 (環境はCakePHP4系を想定していますが、他のバージョンでも同様に動作すると思います) 文字列のフォームであればmaxlength属性を追加してやればそれで済みますが、数値フォームはmaxlengthが効かない仕様だそうです。 yo3.dev そこで今回は、JavaScriptを併用することで桁数制限のある数値フォームを実装します! 実装 まず、素直…
はじめに CakePHPでデータをデータベースに保存するのは、とても簡単です。 基本的には以下の流れとなります。 1. エンティティを作成 コントローラー内に下記の通り記述します。 <?php $newEntity = $this->モデル->newEntity(); 2. データを加工 そのままだと空っぽのデータになってしまうので、適宜データを加工します。 <?php // フォームの入力値を使う $entity = $this->モデル->patchEntity($newEntity, $this->request->getData()); // エンティティの値を指定する $entity…
以前、hasMany の Association を contain すると 別SQL になるという内容の記事を書きました 今回は、どのような仕組みで別SQLになるのか、コアのコードを追ってみました version CakePHP: 4.2.8 仕組み \Cake\ORM\EagerLoader::loadExternal によって、別SQLになる Decorates the passed statement object in order to inject data from associations that cannot be joined directly. 別SQLになるアソシエー…
こんにちは!webエンジニアの高谷です。 弊社ではCakePHPなどの社内のプロジェクトで使われているフレームワークやライブラリのアップデートを定期的に行っています。 その一環でママリのアプリ内で使用されているwebviewのCakePHPを3.8から4.0にアップデートした際に、使用しているPHPStanのバージョンが0.11とかなり古めだったのでこちらも1.4にメジャーアップデートしました。 今回はPHPStanを中心にアップデートした際の変更点をいくつかピックアップしていきたいと思います。 はじめに PHPStan1.0のリリース PHPStanは最初のリリース(2016年7月)から長ら…
こんにちは。 @otukutunです。 今回とあるキャンペーンサイトでGoogle オプティマイズのリダイレクトテストとCakePHPを連携して、すばやくABテストできる仕組みを構築したのでその方法について説明します。 Google オプティマイズとは Google オプティマイズはGoogleが提供しているABテストツールで、無料で提供されています(2022/03/11時点)。Google製ということもあり、Googleアナリティクス連携がスムーズにできる使い勝手のよいツールです。Google オプティマイズには様々なテスト方法が提供されていて、A/B テストやサーバーサイドテスト、リダイレ…
DBのデータ型 から PHPの型(Entityのpropertyの型) への変換 \Cake\Database\Type 以下の Class の toPHP メソッドで行われる 例 \Cake\Database\Type\StringType::toPHP` 一覧 \Cake\Database\TypeFactory::$_types PHPの型(Entityのpropertyの型) から DBのデータ型 への変換 \Cake\Database\Type 以下の Class の toDatabase メソッドで行われる 例 \Cake\Database\Type\StringType::toP…
こんにちは。バックエンドエンジニアのTOCです。 このエントリは、 コネヒト Advent Calendar 2021 の10日目のエントリです。 9日目は @otukutunさん による 洋書読み始めるならThe Minimalist Entrepreneurがオススメ でした。 弊社では多くのプロダクトで CakePHP を利用しております。エンジニア組織の取り組みで CakePHP のバージョンアップ対応を行ったのですが、リリース時に起こった困りごとについて、今回は紹介したいと思います。 目次 はじめに どんなことをやったのか リリースしてどうなった? 原因を調べる どう対応したのか リ…
BASE Advent Calendar 2021 9日目の記事です。 フリーランスのフロントエンドエンジニア 坪内です。 BASE のお手伝いをさせていただくようになって 1ヶ月が経ち、色々見えるようになってきた中で最も気になっていた点の 1つが、 「HMR されていない」 でした。 BASE の Web フロントエンドは webpack でビルドされているのですが、 ローカルの開発環境が Docker 上で動いている事もあってか、残念ながら HMR はされていない状況でした。 「Docker 環境だから無理?」 「“webpack HMR docker” とかでググると色々出てくるし出来そ…
はじめに こんにちは、広告技術部の fujishiro です。 ゼルダの伝説 ティアーズ オブ ザ キングダムが発売されましたね。私は乗り遅れてしまっていて、そもそもゼルダの伝説をやったことがないのですが、今作は盛り上がりがすごいので気になっています。 さて先日、私が Gunosy に転職して 1 年が経ったので、転職してからの 1 年間の振り返りとしてこれまで取り組んできたことをざっくりとご紹介できればと思います。 広告技術部での初めの 1 年間はこんな感じでしたよということをふんわり知っていただければ幸いです。 はじめに Gunosy に転職した理由 Gunosy での取り組み 5 月 -…
はじめに こんにちは、2022年新卒の河原です。 突然ですが、皆さんは今までどのような開発体験をされてきましたか? 学生時代からゴリゴリに開発していた人もいれば、全く違う職種から独学やプログラミングスクールで学んでエンジニアリングに携わっている人など、人によってキャリアは多種多様だと思います。 私の場合はこれまで、学生・インターン・正社員としてシステムの開発に携わってきました。まだ社会人になってから1年と少ししか経っておらず、学生時代の経験もある程度は新鮮に覚えています。 この記事では、そんな私が学生・インターン・正社員でのエンジニアリングを通して痛感した『開発体験の差』と、今後に活かしたい『…
Formでテキストエリアを何も考えずに作ると、入力フォームのサイズが小さくて困る。 下記のページにtextareaのオプション設定が載っている。 book.cakephp.org (例) Form->textarea('People.age',['rows' => '10', 'cols' => '40']) ※textに関しては下記に。 oc-technote.com (例) Form->text('XXXX',['size'=>'10'])
CakePHP 4.x に ParaTest を導入 テストの数が増えてきて全件テストを実行するのに時間がかかるようになった為、ParaTestを導入し、テストを並列実行するようにしてみました。 version CakePHP: 4.4.10 ParaTest: v6.9.1 PHPUnit: 9.6.7 ドキュメント https://github.com/paratestphp/paratest ParaTest PHPUnit でのテストを並列で実行できるツール 並列数(プロセス数)はオプションで指定できる テストクラス単位で並行実行される模様 環境変数 ParaTest に並列実行される…
結論 phpフレームワーク選定の迷いがなくなった。Laravelに決定。 理由 Laravel10を触ったら、最高すぎて笑った。 経緯 phpフレームワーク選定のため、slim4, codeigniter4, cakephp4を触っていた。 laravelはDockerを使った開発なので、難しそうなイメージを持っていたので、避けていた。 まとめ 食わず嫌い、ならぬ、やらず嫌いは損しますね。 WSL2, Docker for Desktopの導入は簡単。 Laravelの開発環境構築も、以前と比べて簡単になりましたね。 人気なのも納得です。 phpフレームワークはLaravelに決定しました。 …
CakePHP3でFormヘルパーで年月日の入力を得たいとき $this->Form->date('Tables.date') と書くが、基本下記のようにしておくと親切かも。(ようは未入力の所は’-’を入れ、ページを開いた日付を入れておく) $this->Form->date('Tables.date',['monthNames'=>false,'empty'=>'----',"default" => date ( "Y-m-d" )]) ※ datetimeならdate("Y-m-d:h-m")として現在時刻も入れられる。ただし日本時間がきちんと動いていないとダメ CakePHP3のForm…
CakePHPなどでtimezoneを設定するとエラーが出ることがある。 下記のようなエラーならMySQL側にtimezoneの設定がないものと思われるので設定する。 Error: SQLSTATE[HY000] General error: 1298 Unknown or incorect time zone. 'Asia/Tokyo' blog.masuyoshi.com 【Cakephp】AsiaTokyoタイムゾーンをMySQLに追加する方法 - FuwaFuwaShoChan BLOG
CakePHP3をインストール後から・・・ ・XxxxsController.phpの作成 src/ControllerにXxxxsController.phpを作成。 ※ まあこんな感じで・・・ --- XxxxsController.php --- <?php namespace App\Controller ; use App\Controller\AppController ; class XxxxsController extends AppController { public function index(){ } } ・ctpファイルを作成 上記のままだとindex.ctpファ…
CakePHP3でMigrationで構築する時に config/bootstrap.php の末尾に追加する一行ですが、CakePHP3.7くらいまでは Plugin::load('Migrations') ; なんですが、それ以上のバージョンでは $this->addPlugin('Migrations') ; としないといけない。
CakePHP の実装 実際のスキーマを元に、Entity 取得時に実行される SQL の SELECT 句に指定するカラム一覧を生成している 上記は schema_cache としてキャッシュされる bin/cake schema_cache clear した上で、Entity を取得した際、カラムの一覧を取得する SQL が実行される事を確認 bin/cake schema_cache clear せず、Entity を取得した際、カラムの一覧を取得する SQL が実行されない事を確認 migration ファイルで \Migrations\Table::update を実行時に sche…
こんにちは、さうでぃです。 今回は、Web制作の始め方を解説しようと思います! ぼくは本業では、システムエンジニアをしており、その中でもフロントエンドエンジニアというWebページの「見た目」に関することを生業としてやっています。 今回は、そんなぼくが「もし今からWeb制作を始めるなら」といったことをイメージしながら、下記のことを意識して書きました。 ・できるだけ楽しくWeb開発の勉強ができるように ・初心者でも一つずつステップが学べるように 実際の学習する言語の順番 HTML & CSS JavaScript(jQuery) PHP WordPress 下記では、言語の特徴とともに、具体的な勉…
こんにちは。コネヒトでバックエンドエンジニアをしております@homiTakahashiです。 今回は私たちの使用している言語PHPの8.1バージョンまでアップデートについて話していけたらと思います。 前提として私たちのアップデートしたいプロジェクトは以下のような環境です。 PHP7.4 フレームワークはCakePHP4.2 dockerを使用 BaseImageはalpine そこでPHP8.1にする上でCakePHP4.2→4.3にバージョンを上げないといけないことが分かり段階を踏むように以下のように進めました。 作業手順 1. DockerImageを変更する PHPのバージョンを指定し、…
配配メール開発課moryosukeです。 2023/03/23(木) ~ 03/25(土)の3日間に渡ってPHPerKaigi2023が開催されました。 今回も前回に引き続きハイブリッド開催となり、現地・配信ともに大盛況でした。 このイベントは日本PHPユーザ会主催のイベントで、ラクスはスポンサーとして協賛させていただいています。 https://phperkaigi.jp/2023/ ラクスからは7人が登壇した他、多くのメンバーが参加しました。 そこで今回は参加者によるレポート、そしてラクスからの登壇者本人によるレポートを紹介させていただきます。 3/23(木)前夜祭 名著「パーフェクトPH…
CakePHP3を使ってサイト構築をして行くにあたり、いったん試しておくことを列挙する。 ファイルのアップロード ファイルをアップロードする方法は確立しないとPDFなどの保存をしてもらう事ができない 動的に選択しが増えるFormのセレクト Formのselectを使う場合、決め打ちの選択肢だけでなく、動的に増える選択肢を実装する
日々の業務の記録としての日報をWEB上に記録していくものとして、日報アプリを考える。 が、特に特別な機能は無く、毎日の日記のように書けるアプリであればいい。 よく考えたらこのブログでも使いようによってはいいのかもしれない。が、アプリの制作自体を学習だと割り切って作る。 システムはCakePHP3を使う。 必要要件は 日付 作業内容 機能として カレンダー的な表示から書く日付にアクセスできること 月の表示は縦に日付を並べたものにすること 最終的に 文字列で検索できること