本家ドキュメントからの変更点
このドキュメントは CakePHP 2.x のクックブックをもとにしています。このページでは、Piece of Cake 2 フォーク上の CakePHP 2 と本家の CakePHP 2.10.24 との違いをまとめ、本家のドキュメントから変更したページを一覧にしています。
CakePHP 2.10.24 との違い
| 項目 | 本家 CakePHP 2.10.24 | Piece of Cake 2 フォーク | 参照 |
|---|---|---|---|
| PHP | PHP 5.3〜7.4 | PHP 8.0〜8.5 | インストール |
| インストール | アーカイブのダウンロード、PEAR、Composer | Composer のみ(pieceofcake2/cakephp) | インストール |
| Composer でのプラグイン | 任意 | composer/installers の設定が必須 | composer.json の設定 |
| アプリケーションの構成 | app/ | モダン構成(src/、templates/、config/ など)または app/ | CakePHP のフォルダ構造 |
| フレームワークの配置 | lib/Cake/ | vendor/pieceofcake2/cakephp/src/Cake/ | CakePHP 2.10 からの移行 |
| クラスの読み込み | App::uses() | Composer の classmap。App::uses() は Composer が知らないクラスにのみ使用 | コントローラ |
| Bake | コアのシェル | pieceofcake2/bake プラグイン | Bake でコード生成 |
| UpgradeShell | コアのシェル | pieceofcake2/upgrade プラグイン | アップグレードシェル |
| キャッシュエンジン | Xcache と Wincache を含む | Xcache と Wincache を削除 | キャッシュ |
| テスト | PHPUnit 3.7 | PHPUnit 9.6 | テスト |
| コントローラーのテスト | ControllerTestCase::testAction() | IntegrationTestTrait と EmailTrait も使える(v2.12.4、CakePHP 5 からのバックポート) | 統合テスト |
| コーディング規約 | CakePHP 2 の規約(タブ、array()) | CakePHP 5 の codesniffer(4 スペース、[]) | コーディング規約 |
| CSRF 対策 | 署名なしのトークン。一部のメソッドは検証されない | HMAC で署名したトークン。GET・HEAD・OPTIONS 以外はすべて検証 | 脆弱性への対応 |
| SSL 証明書 | 同梱の cacert.pem(2016年) | システムの CA バンドルまたは composer/ca-bundle | 脆弱性への対応 |
String クラス | CakeText の別名 | 削除。CakeText を使用 | CakeText |
'readFile' => false を指定した Xml::build() | https:// の URL は取得される (SSRF) | ファイルも URL も読み込まない | 脆弱性への対応 |
$components での CookieComponent の 'type' | 無視される(常に 'cipher') | 反映される | Cookie |
cake server のデフォルトポート | 80 | 8765 | インストール |
| メールのヘッダーの値に含まれる改行 | SmtpTransport はそのまま送信、MailTransport は \r\n のみ削除(ヘッダーインジェクション) | 削除(折り返したヘッダー行は残す) | 脆弱性への対応 |
.. を含むビュー・レイアウト・エレメントの名前 | サーバー上の任意のファイルを指せる(パストラバーサル) | ビューのパスの中のファイルのみ。それ以外は存在しないものとして扱う | 脆弱性への対応 |
プロトコル相対 URL の Auth.redirect | ログイン後に別のホストへリダイレクトされる(オープンリダイレクト) | ローカルのパスに変換 | 脆弱性への対応 |
order のソート方向 | 指定どおり SQL に追加される | ASC / DESC と省略可能な NULLS FIRST / NULLS LAST。それ以外は E_USER_DEPRECATED (v2.12.5)、将来のバージョンでは例外 | 並び順 |
.env ファイル | 非対応 | pieceofcake2/app スケルトン (v2.4.0) が josegonzalez/dotenv で読み込み (フレームワークは読み込まない) | 環境変数 |
破壊的変更の一覧は CakePHP 2.10 からの移行 と CHANGELOG を参照してください。
このドキュメントで変更したページ
以下の変更に加えて、すべてのサンプルコードは CakePHP 5 のコーディング規約(短い配列構文、 クラスとメソッドの波括弧を次の行に置く書き方)に合わせ、パスはモダンなディレクトリ構成で記載しています。 アプリケーションスケルトン、Bake、メンテナンスしているプラグインへのリンクは、それぞれのドキュメントサイト (https://pieceofcake2.github.io/<リポジトリ>/) を指しています。
新しいページ
- CakePHP 2.10 からの移行
- モダン構成への移行
- セキュリティ
- 脆弱性の報告
- 脆弱性への対応 (付録から移動)
- 本家のアドバイザリ
- セキュリティチェックリスト
- PHPUnit 9.6 への移行
- 統合テスト
- E2E テスト
- メンテナンスされているプラグイン
- 静的解析
- 継続的インテグレーション (静的解析のページにあった CI のジョブサマリーの節をここに移動)
- AWS Lambda へのデプロイ
はじめに
- はじめに
- CakePHP 2 のアプリケーションを保守している方やモダンな PHP を知っている開発者に向けた入口のページとして書き直し: 「このフォークについて」(フォークの概要、CakePHP 2 のサポート終了、このドキュメントについて。サイドバーの「Piece of Cake 2」グループとともに削除した「Piece of Cake 2」ページの内容をここに移動)、詳しいページへのリンクを付けた「CakePHP 2.10 との違い」、「どこから始めるか」(既存のアプリケーションを先に、次に
composer create-project pieceofcake2/appと CakePHP 5 を検討する旨の注記)、「モダンな PHP から来た方へ」(名前空間が無いこと、配列ベースの find、モデル、コンポーネント/ビヘイビア/ヘルパー、Configure、ディスパッチャー・フィルター、型宣言が少ないこと) - 概要の文章と、ページに取り込んでいたブログチュートリアルを削除。チュートリアルは チュートリアル & 例 にあります
- ページのタイトルを「入門」から「はじめに」に変更し、サイドバーの「はじめに」グループの先頭に移動。その他のページは、インストール、高度なインストール、URL リライト、フォルダ構造、規約、構造、典型的なリクエストの順に並べ替え
- 「CakePHP 2.10 との違い」: バックポートの項目のリンク先を、GitHub のアップグレードガイドから 統合テスト に変更
- CakePHP 2 のアプリケーションを保守している方やモダンな PHP を知っている開発者に向けた入口のページとして書き直し: 「このフォークについて」(フォークの概要、CakePHP 2 のサポート終了、このドキュメントについて。サイドバーの「Piece of Cake 2」グループとともに削除した「Piece of Cake 2」ページの内容をここに移動)、詳しいページへのリンクを付けた「CakePHP 2.10 との違い」、「どこから始めるか」(既存のアプリケーションを先に、次に
- インストール
- 動作要件: PHP 8.0〜8.5、Composer、MySQL 5.6 以上など対応 DB、mbstring/intl/openssl の説明
composer create-project pieceofcake2/appによる新規作成 (モダンな構成) と database.php、salt/cipherSeed の設定- 既存アプリケーション: cakephp/cakephp を pieceofcake2/cakephp に置き換え、ディスパッチャファイルを更新
- アーカイブ/git でのダウンロード、include_path によるコア共有、サブディレクトリでの開発用設定を削除
- パーミッションの対象を tmp/ と logs/ に変更、ビルトインサーバ (
bin/cake server) と webroot/ 向けバーチャルホストの例を追加 - ビルトインサーバのデフォルトポートは 8765 (v2.12.3 より前は 80 だったことを変更点として記載)
- 「composer.json の設定」を追加: 最小限の composer.json、cakephp-plugin パッケージのために composer/installers の allow-plugins と plugins/{$name}/ への installer-paths が必須であることを説明
- 新規アプリケーション: デバッグレベル、ソルト、データベースの設定を環境変数 (
config/.envまたはプロジェクトルートの.env) でもセットできることを記載 - 「既存のアプリケーションへの導入」を「新しいアプリケーションの作成」の前に移動。最後のリンクは「入門」ではなくブログチュートリアルを指すように変更
- 応用インストール
- PEAR でのインストール、旧来の Composer/bake によるプロジェクト作成、CAKE_CORE_INCLUDE_PATH によるコア共有を削除
- Composer 設定の詳細を追加: replace、プラグインの installer-paths、classmap オートロード、exclude-from-classmap
- パスの変更は config/define.php (ROOT、APP_DIR、WEBROOT_DIR、WWW_ROOT、VENDORS) で行う方法に書き換え、webroot を移動する例を追加
- URLリライティング
- 例はドキュメントルートを webroot/ とする前提に変更、.htaccess をスケルトンの内容に更新、従来の構成の .htaccess は簡単な説明のみに
- nginx の例を PHP-FPM ソケット向けに更新、IIS の web.config を webroot/ に配置、リンク切れ (Web Platform Installer、virtualhostx、Apache wiki) を削除
- CakePHP のフォルダ構造
- モダンな構成 (bin、config、logs、plugins、resources/locales、src、templates、tests、tmp、vendor、webroot) の説明に書き換え、従来の app/ との対応表を追加
- 従来の app/ 構成からモダンな構成へ移行する手順を追加
- CakePHP の規約
- ファイルの場所を src/ と templates/ に変更、String::uuid を CakeText::uuid() に変更
- CakePHP の構造
- AppController/AppHelper/AppModel、ルート、レイアウト、エレメントのパスをモダンな構成に変更
- 例を非推奨の EmailComponent と JsHelper から AuthComponent と FormHelper に変更
CakePHP 概要
- CakePHPって何?使う理由は?
- 機能一覧を PHP 8.0〜8.5、Bake プラグイン、Composer に更新、Bake がコアから分離された旨を記載
- 情報の探し方
- Piece of Cake 2 の GitHub Issue を追加、IRC (freenode) と Google グループを削除、テストケースの場所を更新
コントローラー
- コントローラ
- パスをモダンレイアウト (src/Controller、templates/、plugins/) に変更し、従来の app/ レイアウトは補足として記載
- 「クラスの読み込み」節を追加: Composer の classmap オートロードにより App::uses() が不要になること、引き続き必要な場合
- リクエストとレスポンスオブジェクト
- ディスパッチャのパスを webroot/index.php に変更し、レスポンスのモック例を PHPUnit 9 の getMockBuilder() に変更
- ページコントローラ
- パスを src/Controller と templates/Pages に変更し、コピー元を lib/Cake から app スケルトンまたは Bake プラグインに変更
- Scaffolding
- パスを src/Model、config/core.php、templates/ に変更し、Bake をプラグインとして案内
- コンポーネント
- コンポーネントのパスを src/Controller/Component に変更し、サンプルから App::uses() を削除、コードスタイルを修正
ビュー
- ビュー
- テンプレート、レイアウト、エレメントのパスを templates/ に、ビュークラスを src/View に変更し、従来の app/View との対応表を掲載
- 冒頭の Flash/AMF や SOAP の例を削除し、TwigView プラグインへのリンクを追加
- エレメントキャッシュの例の構文エラーを修正し、独自ビュークラスの例から App::uses() を削除
- メディアビュー
- サンプルのパスを ROOT と WWW_ROOT で指定するよう変更し、相対パスが webroot ではなく APP 基準で解決されることを訂正
- JSONとXMLビュー
- サンプルのビューファイルのパスを templates/Posts/json/index.ctp に変更
- テーマ
- テーマのパスを templates/Themed と webroot/ に変更し、プラグインのアセットの例を plugins/ に変更
- ヘルパー
- ヘルパーのパスを src/View/Helper に変更し、サンプルから App::uses() を削除して classmap オートロードの説明を追加、Bakery への言及をプラグイン一覧へのリンクに変更
モデル
- モデル
- モデルと AppModel は
src/Model/に配置、AppModel はコアに含まれない、App::uses()は classmap を使わない場合のみ必要
- モデルと AppModel は
- データを取得する
- 「並び順」の節を追加:
orderの書式、使用できるソート方向、ソート方向の検証 (v2.12.5) の変更点の注記、非推奨エラーが出るコードの直し方、ユーザーが並び順を選ぶ場合のホワイトリストの例
- 「並び順」の節を追加:
- アソシエーション: モデル同士を繋ぐ
- モデルファイルのパスを src/Model/ に変更
- データを保存する
- 例のファイルコメントを src/Controller/ と templates/ に変更
- データバリデーション
- ローカライズしたバリデーションクラスは src/Validation (classmap または App::uses() で読み込み)、Localized プラグインのリンクを pieceofcake2/localized に変更、Windows/mod_php の注記を削除
- コールバックメソッド
- 例のパスを src/Model/ に変更
- ビヘイビア
- ビヘイビアは src/Model/Behavior、コアのビヘイビアは vendor/pieceofcake2/cakephp/src/Cake/Model/Behavior
- コミュニティのビヘイビアは CakePHP Bakery ではなくメンテナンスされているプラグインへのリンクに変更
- データソース
- 対応データベース・バージョン・PDO エクステンションの表、「接続設定」節を追加 (config/database.php、DSN での encoding、PostgreSQL の sslmode、PHP 8.1 のネイティブ型と ATTR_STRINGIFY_FETCHES)
- SQL Server: Windows 専用の Native Client ではなく ODBC ドライバ、port・schema (デフォルト dbo)・options・persistent の設定を説明
- データソースの例とプラグインのパスを src/Model/Datasource と plugins/ に変更
- 旧 cakephp/datasources リポジトリの代わりに pieceofcake2/datasources プラグインへリンク
- モデルの属性
- データベース設定ファイルのパスを config/database.php に変更
order: 使用できるソート方向と「並び順」へのリンクを追加
コアライブラリ
- キャッシュ
- エンジン一覧から Xcache と Wincache を削除 (変更点の注記あり)。Apc エンジンは APCu を使うと説明
- 設定ファイルのパスを config/bootstrap.php、config/core.php、src/Lib/Cache/Engine に変更。PHP 5.3 に関する記述を削除
- イベントシステム
- 例のパスを src/Lib/Event、config/bootstrap.php、config/events.php に変更。App::uses と PHP 5.3 の記述を削除し、Composer のクラスマップによるオートロードを説明
- グローバル定数およびグローバル関数
- パス定数をモダンレイアウトの値で説明 (APP=src/、CONFIG=config/、TESTS=tests/、TMP=tmp/、LOGS=logs/、WWW_ROOT=webroot/)。レガシーの app/ の値は一度だけ言及
- CAKE、CAKE_CORE_INCLUDE_PATH、CORE_PATH は vendor/pieceofcake2/cakephp/src を指すと説明。新しい CORE_ROOT 定数を追加
- 国際化と地域化
- ロケールファイルの場所を resources/locales に変更 (レガシーの app/Locale も検索される)。プラグインの翻訳は plugins/<Plugin>/Locale
- モダンレイアウト向けの i18n extract の例を追加: bin/cake i18n extract --paths src,templates --output resources/locales
- ロギング
- デフォルトのログディレクトリを logs/ (LOGS 定数) に変更。独自ログエンジンは src/Lib と plugins/ に配置。例から App::uses を削除
- Translate
- i18n テーブル初期化コマンドを bin/cake i18n に変更
- Tree
- 例のパスを src/Model/Category.php に変更
- アクセス制御リスト
- パスを config/ (core.php、acl.ini.php、database.php、Schema/db_acl.sql) に変更。コマンドは bin/cake。コアのモデルは vendor/pieceofcake2/cakephp/src/Cake/Model
- 認証
- 独自の認証・認可・ハッシャークラスを src/Controller/Component/Auth に配置。レイアウトは templates/Layouts。App::uses を削除
- Cookie
- 例で type('aes') と Security.useOpenSsl を使用。デフォルトの 'cipher' は脆弱で 'rijndael' は mcrypt が必要という警告を追加
- タイプは
$componentsの'Cookie' => ['type' => 'aes']で設定 (type() でも設定可能)。v2.12.3 より前はこの設定が無視されていたことを変更点として記載。pieceofcake2/app v2.3.1 のスケルトンでは Security.useOpenSsl が有効
- フラッシュ
- フラッシュ用エレメントの場所を templates/Elements/Flash に変更
- ページ制御
- PaginatorComponent が受け付けるソートのフィールドと方向、「並び順」へのリンクを追加
- セキュリティ
- 変更点の注記: CSRF トークンの HMAC 署名 (CVE-2020-15400) と _method で上書きしたリクエストの検証 (CVE-2015-8379)
- CacheHelper
- Cache.check の設定場所を config/core.php に変更
- FlashHelper
- フラッシュ用エレメントは templates/Elements/Flash。コアの default/success/error エレメントはアプリケーション側で上書きできると説明
- JsHelper
- パスを webroot/js と templates/Layouts に変更。PHP4/PHP5 のメソッドチェーンに関する記述を削除
- PaginatorHelper
- 例のパスを templates/Posts/index.ctp に変更
- RssHelper
- パスを config/routes.php、templates/Layouts/rss、templates/Posts/rss に変更
- TextHelper
- String クラスへの言及を CakeText に変更
- TimeHelper
- タイムゾーンの設定場所を config/core.php に変更
コアユーティリティライブラリ
- App クラス
- クラスのローディングを Composer の classmap オートロード前提に書き直し、App::uses() は Composer が把握しないクラス (classmap なしのアプリケーションクラス、Composer 非対応プラグイン) にのみ必要
- コアクラスのオーバーライドは src/Lib に置き App::uses() で登録、exclude-from-classmap の注意を追加
- ベンダーファイル: Composer のライブラリは読み込み不要、手作業で置くファイルは vendors/、プラグインのパスは plugins/、CakePHP 1.3 から 2.0 への移行に関する記述を削除
- CakeEmail
- 設定は config/email.php、テンプレートは templates/Emails と templates/Layouts/Emails、独自トランスポートは src/Lib/Network/Email、EmailComponent との比較と App::uses() を削除
- Gmail は廃止された「安全性の低いアプリ」設定の代わりにアプリパスワードを使用、STARTTLS の例はポート 587、MailTransport::_mail() の型付きシグネチャの変更点を注記
- Folder & File
- Folder と File はオートロードされるため App::uses() を削除
- Hash
- natural ソートの PHP 5.4 要件の記述を削除
- HttpSocket
- CA 証明書 (システムの CA バンドルと composer/ca-bundle へのフォールバック) を本文で説明、独自レスポンス・認証クラスは src/Lib/Network/Http に置き HttpSocketResponse を継承、App::uses() と Bakery の URL を削除
- CakeNumber
- 例から不要な App::uses() を削除
- データのサニタイズ
- Sanitize は CakePHP 3.0 以降に存在しないと記述 (「削除予定」から変更)
- Security
- mcrypt は PHP 7.2 以降同梱されないため config/core.php で Security.useOpenSsl を有効にすること (互換の形式)、rijndael() は PECL の mcrypt が必要、Cookie の 'cipher' タイプへの警告を本文で説明
- pieceofcake2/app のスケルトン (v2.3.1 以降) では Security.useOpenSsl が有効になっていることを追記
- Set
- テストファイルのパスを tests/TestCase/Utility/SetTest.php に変更
- CakeText
- String クラスの非推奨の説明と例の App::uses() を削除し、String クラス削除の変更点を 1 つの注記にまとめた
- CakeTime
- strftime() 形式のフォーマットを本文で説明 (php81_bc/strftime 経由の IntlDateFormatter、英語以外には intl が必要)、例の構文エラーを修正し App::uses() を削除
- XML
- CakePHP 1.3 の「今までの方法」との比較と App::uses() を削除、Xml::build() のオプション (return、デフォルト false の loadEntities、readFile、parseHuge) とユーザー入力を渡す際の警告を追記、誤った例を修正
readFileでファイルと URL の両方の読み込みを無効にできることを記載し、ユーザー入力の例で'readFile' => falseを使用。v2.12.3 より前は https の URL が取得されていたことを変更点として記載
コンソール & シェル
- シェルとタスクとコンソール
- コンソールは
bin/cake(またはvendor/bin/cake) で起動し、シェルはsrc/Console/Command/に置く形に変更。レガシーのapp/Console/cakeは補足のみ - コンソールの起動メッセージとコアシェル一覧を v2.12.2 の内容に更新 (bake と upgrade はプラグインに移動)
lib/Cake/Consoleをシステムパスに追加する手順 (Windows の手順、cake.bat) を削除- タスクの動的ロードの例を、コアから削除された ProjectTask ではなくアプリケーションのタスクに変更
- コンソールは
- Bakeでコード生成
- pieceofcake2/bake プラグイン向けに書き直し: Composer でのインストール、
CakePlugin::load('Bake')、bin/cake bakeコマンド - Bake がモデル、コントローラ、ビュー、テスト、フィクスチャを書き出す場所をモダンレイアウトとレガシーレイアウトについて記載 (pieceofcake2/bake 1.0.3 以降では templates/、tests/TestCase/、tests/Fixture/)
- bake テーマの場所を更新 (
plugins/Bake/Console/Templates/default、src/Console/Templates/[theme])。lib/Cake/Console/Templatesの記述を削除
- pieceofcake2/bake プラグイン向けに書き直し: Composer でのインストール、
- スキーマの管理とマイグレーション
- コマンドを
bin/cake schemaに変更。スキーマファイルの場所をconfig/Schemaに変更
- コマンドを
- ACLShell
- コマンドを
bin/cakeに変更
- コマンドを
- Completion シェル
- コマンドを
bin/cakeに変更。Bake プラグインのシェルはBake.bakeとして例示し、コマンド一覧からコアのbake/upgradeを削除
- コマンドを
- cronjobに登録してシェルを実行する
- cron の例を
cd /path/to/my_app && bin/cakeに変更
- cron の例を
- Shell ヘルパー
- 独自ヘルパーの例を修正: クラス名とファイル名には
ShellHelperサフィックスが必要 (src/Console/Helper/HeadingShellHelper.php)、App::uses()は不要 output()の例で引数を配列で渡すように修正 (文字列やクロージャを直接渡すと PHP 8 で TypeError になる)
- 独自ヘルパーの例を修正: クラス名とファイル名には
- I18N シェル
- 抽出の例で
srcとtemplatesをスキャンしresources/localesに出力するよう変更。この場合モデルのバリデーションメッセージは抽出されない点を追記
- 抽出の例で
- テストシェル
bin/cake test app AllTestsの例と、Composer でインストールする PHPUnit 9.6 の説明を追加
- アップグレードシェル
- pieceofcake2/upgrade プラグイン向けに書き直し (Composer でインストールし
CakePlugin::load('Upgrade')でロード)。手動でダウンロード・コピーする手順を削除
- pieceofcake2/upgrade プラグイン向けに書き直し (Composer でインストールし
開発
- 構成設定
- 設定ファイルを
config/基準で説明 (core、bootstrap、database、routes、email、acl、Schema)。レガシーのapp/Config/とCONFIG定数は本文で説明 - データベース: 組み込み PDO ドライバーを列挙、
encodingは DSN で渡す、flags(PHP 8.1 のATTR_STRINGIFY_FETCHES)、schema(PostgreSQL/SQL Server)、sslmode、optionsを追加、PHP 5.3.7 の記述を削除 - 変更点: SQL Server ドライバーは SQL Server 2022 以降が対象、
port/schema/optionsの扱い - クラスの読み込みを Composer classmap 前提で書き直し (
composer dump-autoload、App::uses()はオートロード非対応プラグインのみ)。フレームワークの classmap 移行を変更点として記載 - コア設定: Session のサブキー
nameをcookieに修正、cacheLimiterを追加、ハンドラーとスキーマのパスとbin/cakeをモダン構成に。App.baseUrl 用の .htaccess 削除を構成別に記載 - セキュリティ:
Security.saltの用途を記載し、CSRF トークンの HMAC 署名を変更点として記載。cipherSeedは脆弱な Cookie 'cipher' 専用。Security.useOpenSslを追加 (PHP 8 で encrypt()/Cookie 'aes' に必須。pieceofcake2/app v2.3.1 のスケルトンでは有効) - キャッシュ: 使用可能なエンジンを列挙 (File、Apc/APCu、Memcached、Memcache、Redis)。Xcache/Wincache の削除を変更点として記載
- 設定リーダー: デフォルトの読み込み先は
CONFIG。独自リーダーの例をsrc/Lib/Configureに移し、プロパティを宣言 (PHP 8.2)、App::uses()を削除。ja の例のクラス名を PHP の XMLReader と衝突するXmlReaderからMyXmlReaderに変更。ConfigReaderInterface/ConfigureException の説明を修正 - Inflector のパス
src/Cake/Utility/Inflector.phpとconfig/bootstrap.phpを本文に反映。古い IE/Chrome Frame や AMF/SOAP の例を更新。ja:$mergeの説明を修正しConfigure::consume()を追加 - 「環境変数」の節を追加: pieceofcake2/app スケルトンが
config/core.phpの先頭で josegonzalez/dotenv によりconfig/.envとプロジェクトルートの.envを読み込むこと (CakePHP 3〜5 のアプリケーションスケルトンの.envサポートのバックポート。変更点: app v2.4.0 で追加)、優先順位 (実際の環境変数 >config/.env> ルートの.env)、値のクォート、レガシー構成や以前のアプリケーションへの読み込み処理の追加方法、スケルトンが読み込む環境変数 (DEBUG、SECURITY_SALT、SECURITY_CIPHER_SEED、DB_*、DB_TEST_*)
- 設定ファイルを
- ルーティング
- ルート設定ファイルのパスを config/routes.php に変更(従来の app/Config/routes.php はフォルダ構造ページへのリンク付きで併記)
- 組み込みルートの場所を vendor/pieceofcake2/cakephp/config/routes.php に修正し、無効化は config/routes.php の require 行を削除すると説明
- プレフィックスルーティング: Routing.prefixes は config/core.php、ビューは templates/Users/admin_edit.ctp
- カスタムルートクラスは src/Routing/Route に置き、App::uses() ではなく Composer の classmap(composer dump-autoload)でオートロード
- コード例: パスのコメントを新レイアウトに統一し、渡された引数の例を正しい PHP クラスに修正
- ja: 他のページからのリンクが機能するよう明示的なアンカー (routes-configuration、connecting-routes、route-elements、prefix-routing、route-conditions、passed-arguments、named-parameters) を追加
- セッション
- パスをモダン構成に更新 (
tmp/sessions、src/Model/Datasource/Session/、config/Schema/sessions.php、bin/cake schema create sessions)。レガシーのパスは本文で補足 - ハンドラーの例を修正: callable は 6 つ、
userAgentではなくcheckAgent、ini キーにsession.を付与。callable 形式が PHP 8.4 で非推奨であることを記載 - 変更点:
SessionHandlerAdapterによりハンドラーがsession.use_strict_mode(PHP 8.6 でデフォルト) に対応。独自のread()/destroy()への要件を記載 - キャッシュセッションの説明から Xcache を削除 (APCu、Memcached、Redis)。ComboSession の例は APCu を使い
App::uses()を削除、モダン構成のパスに。コードブロックを PHP 指定に修正
- パスをモダン構成に更新 (
- ディスパッチャー・フィルター
- フィルターは config/bootstrap.php で設定し、アプリのフィルタークラスは src/Routing/Filter、プラグインのものは plugins/MyPlugin/Routing/Filter に配置
- フレームワーククラスの App::uses() と PHP 5.3 のクロージャに関する注記を削除し、composer dump-autoload と設定付き指定時の class_exists() 要件を追記
- 例の不正なクロージャ記述と崩れたマークアップを修正
- (日本語版)優先度とプラグイン記法に関する誤訳を修正
- 例外(Exception)
- 組み込み例外の一覧で欠けていた例外クラス名を表形式で復元
- パスをモダン構成(templates/Errors、templates/Layouts、src/Lib/Error、config/core.php)に変更し、Exception.skipLog を追記
- 例外ハンドラはすべての Throwable を受け取ることを説明し、例を Throwable 型に変更、PHP 5.3 の注意書きとフレームワーククラスの App::uses() を削除
- 変更点: Composer クラスマップのため、アプリでの CakeErrorController の上書きは確実ではない。_getController() を使う
- エラーハンドリング
- パスと例をモダン構成(config/core.php、config/bootstrap.php、src/Lib/AppError.php)に変更
- Error.extraFatalErrorMemory とエラーの出力先(logs/error.log、logs/debug.log)を追記
- 変更点: PHP 8 で @ 抑制を正しく扱うため、デフォルトハンドラは error_reporting() & $code で判定
- PHP 7/8 の Error オブジェクト(TypeError など)は例外ハンドラに渡ること、PHP 8 では $context が渡されないことを説明
- PHP 5.3 の注意書きを削除し、ハンドラの例を PHP 8 向けに更新
- デバッグ
- debug() のシグネチャを更新し、trace/excerpt の例をフォークのパスに変更、invoke() を getInstance() に置き換え
- ログの出力先を logs/(debug.log/error.log)に変更し、Object を CakeObject に、App::uses('CakeLog') を削除
- DebugKit: pieceofcake2/debug_kit を Composer でインストールし、config/bootstrap.php で読み込む。フォークの DebugKit のドキュメントへのリンクを追加
- DebugKit: 現在のツールバー (右下の CakePHP アイコン、パネル、リクエスト履歴) の説明に更新
- テスト
- PHPUnit 9.6 を Composer (require-dev) でインストール。PHPUnit 3.7/4.x/5.x、.phar、オートローダー回避策の手順を削除
- テストケースは tests/TestCase、フィクスチャは tests/Fixture、設定は config/ に変更。レガシーな app/Test 構成は代替として記載
- テストの実行: phpunit.xml.dist (tests/bootstrap.php、CakeFixtureInjector リスナー、stderr) を使う vendor/bin/phpunit と bin/cake test を説明。lib/Cake/Console/cake と --app の例を削除
- テストケースの一覧表示 (ケース指定なしの bin/cake test app、ウェブランナーの一覧) は tests/TestCase を探し、無ければ Test/Case を探す
- ウェブランナー: スケルトンの webroot/test.php、?case= でケースを指定して実行。コマンドラインでの実行を推奨
- コード例を PHPUnit 9 向けに更新: setUp()/tearDown(): void、assertStringContainsString、assertIsArray、assertMatchesRegularExpression、willReturn()、PHPUnit\Framework\TestCase
- createMock()/getMockBuilder()、非推奨の CakeTestCase::getMock()、getMockForModel() のシグネチャ、expectException() の節を追加
- staticExpects() の例をセッションへの Auth.User 書き込みに置き換え
- カバレッジには Xdebug か PCOV が必要。出力先を tmp/coverage に変更
- テストスイートは TESTS . 'TestCase' を使用。phpunit.xml.dist を使う場合 AllTests は不要と記載
- プラグインのテストは plugins/<Name>/tests/TestCase (Test/Case も可)
- Jenkins: composer install の手順、config/database.php、vendor/bin/phpunit、jenkins.io へのリンク。GitHub Actions については継続的インテグレーションのページへのリンクを追加。test-database-setup、generating-code-coverage、integration-with-jenkins のアンカーを明示的に追加
- 「テストの種類」の節を追加: フィクスチャを使うユニットテスト、testAction() によるコントローラーのテスト、ブラウザーによる E2E テスト (E2E テストのページへのリンク)。testing-controllers のアンカーを明示的に追加
- 「テストの種類」に
IntegrationTestTraitによる統合テストを追加 (統合テストのページへのリンク)。ControllerTestCaseは引き続きサポートされていることを記載。「コントローラーのテスト」に統合テストのページへのリンクのヒントを追加。test-case-conventions のアンカーを明示的に追加
- REST
- パスを config/routes.php、src/Controller、templates/Recipes/xml に更新
- HTTP メソッド上書きの優先順位を修正(X-HTTP-Method-Override ヘッダが _method より優先)
- ja: custom-rest-routing アンカーを明示的に追加
デプロイ
- デプロイ
- ドキュメントルート、core.php、プラグインのシンボリックリンクのパスをモダンな構成に変更
composer install --no-dev --optimize-autoloaderと開発用プラグインの条件付き読み込みを追加- デバッグレベルは独自の
CAKEPHP_DEBUGではなく、スケルトンの環境変数DEBUGから読み込む例に変更。ほかの設定は環境変数の節へのリンクを追加 - 新しいページへのリンクとして「AWS Lambda へのデプロイ」の節を追加
- AWS Lambda へのデプロイ
- 新しいページ: pieceofcake2/app スケルトンを Bref 3 と Docker コンテナイメージで AWS Lambda にデプロイする方法 (TMP/LOGS を /tmp に、Bref の FPM ランタイム用の SCRIPT_NAME と HTTPS、stderr へのログ出力)、環境変数と SSM パラメータストア (
bref-ssm:) による設定、pieceofcake2/aws による DynamoDB のセッションと SES のメール、キャッシュ、署名付き URL による S3 へのアップロード、Lift (S3 + CloudFront) による静的なアセット、RDS、コンソールのコマンドとスケジュール、Runtime Interface Emulator によるローカルでのテスト、OIDC を使った GitHub Actions からのデプロイ
- 新しいページ: pieceofcake2/app スケルトンを Bref 3 と Docker コンテナイメージで AWS Lambda にデプロイする方法 (TMP/LOGS を /tmp に、Bref の FPM ランタイム用の SCRIPT_NAME と HTTPS、stderr へのログ出力)、環境変数と SSM パラメータストア (
セキュリティ
- セキュリティ
- 新しいセクションと概要のページ: Organization の SECURITY.md に基づくサポートするバージョン (最新のリリースにセキュリティ修正を提供。これまではパッチリリースとして提供)、修正の告知 (GitHub のセキュリティアドバイザリ、CHANGELOG/UPGRADE.md、このドキュメント)
- 脆弱性の報告
- 新しいページ: 非公開の脆弱性報告 (Security タブの Report a vulnerability)、報告に含める情報、SECURITY.md の公開までの流れ。脆弱性への対応の「脆弱性の報告」の節から移動
- 脆弱性への対応
/ja/appendices/security-fixesから移動 (古い URL はこのページにリダイレクト)。報告の節は脆弱性の報告に移動'readFile' => falseを指定したXml::build()の SSRF (2.12.3 で修正) を追加。Cookie のタイプを$componentsで設定。Security.useOpenSsl のスケルトンについての注記- SmtpTransport/MailTransport のメールヘッダーインジェクション (GHSA-4f9q-3c4x-52cv)、ビュー・レイアウト・エレメント名のパストラバーサル (GHSA-w2mh-x92p-5p95)、AuthComponent のログイン後のオープンリダイレクト (GHSA-x4p9-p4cx-gxwx) を追加 (いずれも 2.12.5 で修正)。表に GHSA の ID を記載。本家の CakePHP 2.x を使うアプリケーションは pieceofcake2/cakephp に切り替えると修正を適用できることを記載
- 本家のアドバイザリ
- 新しいページ: CakePHP 2.x に関係する本家 CakePHP のアドバイザリの対応状況 (フォークで修正済み、または対象外)。フォークの CHANGELOG、UPGRADE.md、アドバイザリに基づく
- セキュリティチェックリスト
- 新しいページ: debug 0、固有のソルトとシード値、Composer での更新、SecurityComponent/CSRF、クッキーとセッションのフラグ、ファイルのパーミッション、HTTPS、サポートされている PHP。各設定を説明しているページへのリンク
チュートリアル & 例
- チュートリアル & 例
- CakePackages と Bakery へのリンクを、メンテナンスされているプラグインのページへのリンクに置き換え
- シンプルな認証と承認のアプリケーション
- パスを
src/とtemplates/に更新。不要なApp::uses()を削除。UsersController を Bake プラグインで生成したものとして説明 posts.user_idをINT UNSIGNEDで追加するよう変更 (MySQL 8 では整数の表示幅が非推奨)
- パスを
- ブログチュートリアル
- セットアップを書き直し:
composer create-project pieceofcake2/app blog、PHP 8.0 以上、bin/cake serverによるビルトインサーバ (デフォルトのポートは 8765)。アーカイブのダウンロードと git clone の手順を削除 - パスを
config/database.php、config/core.php、tmp/、logs/に更新。MySQL の設定例でutf8mb4を使用 - mod_rewrite の節を短い「Apache を使う場合」の節 (DocumentRoot は
webroot/) に置き換え
- セットアップを書き直し:
- ブログチュートリアル - レイヤーの追加
- ファイルの配置を
src/Model、src/Controller、templates/Posts、config/routes.phpに変更 view()とdelete()の引数を$id = nullにし、ID がない場合に PHP 8 で ArgumentCountError ではなく NotFoundException になるよう修正
- ファイルの配置を
- ACL を制御するシンプルなアプリケーション - パート2
- AclExtras を Composer (
pieceofcake2/acl_extras) でplugins/AclExtrasにインストールし、bin/cake AclExtras.AclExtrasで実行 - Session のフラッシュメッセージを FlashComponent/FlashHelper に置き換え。
login()アクションの全体を記載
- AclExtras を Composer (
- ACLを制御するシンプルなアプリケーション
composer create-project pieceofcake2/app aclによるセットアップ、config/bootstrap.phpでの Bake プラグインのロード、bin/cakeコマンド、モダンなパスに変更- SQL を MySQL 8 で動くよう修正: 予約語の
groupsをクォートし、整数の表示幅を削除 - 非推奨の
AuthComponent::password()の代わりに BlowfishPasswordHasher でパスワードをハッシュ化 (カラムは VARCHAR(255))。パスワードがない場合 beforeSave で触れないよう修正 - AppController で FlashComponent/FlashHelper をロード (bake したコントローラが使用)。ログインで Flash と
url指定のForm->create()を使用。CakePHP 2.0 用のallow('*')を削除 - Bake はビューを
templates/<Controller>/に書き出す (pieceofcake2/bake 1.0.3 以降)。ビューを移動する手順を削除
プラグイン
- プラグイン
- CakePHP 2 プラグインの PHP 8 対応状況を説明し、Piece of Cake 2 がメンテナンスするフォークへのリンクを追加
- プラグインの作成
- プラグインのパスを plugins/ に、ビューの上書きを templates/Plugin に変更し、プラグイン内部の構成とテストディレクトリを説明、プラグインのコードで App::uses() を残す理由を記載
- Bake のコマンドを Bake プラグインの bin/cake に変更し、欠けていたアセットのプラグイン記法の例を追加、flash/ フォルダを削除
- 公開方法: plugins.cakephp.org と awesome-cakephp への言及を削除し、composer.json の例 (type cakephp-plugin、composer/installers、installer-name) を追加
- プラグインのインストール
- Composer を標準のインストール方法とし (pieceofcake2/debug_kit の例、plugins/ 用の composer/installers と installer-paths)、手動や Git でのインストールも plugins/ と https の URL に変更
- プラグインは config/bootstrap.php でロードすることと、プラグインのクラスに App::uses() が必要な場合を記載
- プラグインを plugins/<Name>/ にインストールするために composer.json の installer-paths と allow-plugins (composer/installers、Composer 2.2 以降) の設定が必須であることを明記
- プラグインの使い方
- プラグインのロードを config/bootstrap.php で行うことと、プラグインの Config/ 内のファイルの場所を記載し、schema コマンドを bin/cake に変更
貢献
- 貢献
- 貢献先は GitHub の pieceofcake2/* リポジトリ (フレームワーク、アプリケーションスケルトン、プラグイン、ドキュメント)
- 貢献の手順は Organization の CONTRIBUTING.md で説明し、この章のページは概要とその各セクションへのリンクを記載
- ドキュメント
- ドキュメントは pieceofcake2/docs (2.x)、Markdown と VitePress、GitHub Actions でデプロイ、bin/dev-server.sh でローカル確認。メンテナンスは en/ja のみ。Jenkins、IRC、ドキュメントチームのメールを削除
- reStructuredText/Sphinx のフォーマットガイドを Markdown/VitePress のガイドに置き換え (見出しとアンカー、リンク、コードブロック、アラート、info/pieceofcake2 コンテナ、取り込み)、pieceofcake2/docs の README に記載
- チケット
- Issue は pieceofcake2/* リポジトリへ。報告前に CHANGELOG と移行ガイドを確認。質問は Stack Overflow (IRC と Google グループを削除)
- セキュリティ問題は SECURITY.md に従い GitHub の非公開の脆弱性報告 (Security タブの Report a vulnerability) で報告。security@cakephp.org を削除
- 報告の詳細は CONTRIBUTING.md と SECURITY.md へのリンク
- コード
- セットアップ: PHP 8.0 以上と Composer。PHPUnit 9.6、PHP_CodeSniffer、PHPStan は開発用依存としてインストール。PHP 5.3、mcrypt、PHPUnit 3.7 の要件を削除
- 「テストの実行」を新設: tests/config/database.php を vendor/pieceofcake2/app/config にコピーし、DB 環境変数でデータベースを選んで vendor/bin/phpunit と vendor/bin/phpcs を実行
- メンテナンスするブランチは 2.x のみ。upstream/2.x から作業し Pull Request も 2.x に送る。2.next/4.0 の説明と Cake Software Foundation への帰属の記述を削除
- セットアップ、テストの実行、Pull Request の手順は CONTRIBUTING.md へのリンク
- コーディング規約
- CakePHP 5 ベースの規約 (cakephp/cakephp-codesniffer ^5.0、PSR-12) に書き直し: 4 スペース、配列の短縮構文、末尾カンマ、クラス/メソッドの中括弧は次の行、elseif、ヨーダ記法禁止、?? と ?:、定数のアクセス権、ドキュメントブロックのルール
- phpcs/phpcbf のインストールと実行方法、フレームワークの phpcs.xml にある CakePHP 2 用の除外、pieceofcake2/app のアプリケーション用 phpcs.xml (従来構成のパスも)、本家 CakePHP 2 の規約との違いの表を追加
- 後方互換性ガイド
- 書き直し: フォークのリリースで変わること (キャッシュエンジン、ディレクトリ構成、オートロードなど互換性のない変更を含んだリリースもある)、移行ガイド。貢献者向けガイドラインは CONTRIBUTING.md へのリンク。本家のセマンティックバージョニングの表を削除
- CakePHP の開発プロセス
- フォークのメンテナンス中心のプロセスに書き直し: バージョン番号 (2.10.24.x、2.11.0、2.12.x)。目的、ブランチ、リリースは CONTRIBUTING.md へのリンク。IRC と本家のブランチモデルを削除
付録
- 本家ドキュメントからの変更点
- このページ。削除したサイドバーの「Piece of Cake 2」グループ (
/ja/pieceofcake2/changes) から付録に移動
- このページ。削除したサイドバーの「Piece of Cake 2」グループ (
- CakePHP 2.10 からの移行
- v2.12.3 の節を追加 (Xml::build() の SSRF 修正、Cookie の
'type'設定、ServerShell のポート、テストケースの一覧、SQL Server の ERRMODE)。Cookie の例で$componentsを使用 - v2.12.5 の節を追加 (メールのヘッダー、ビュー・レイアウト・エレメントの名前、ログイン後のリダイレクトのセキュリティ修正。不正な ORDER BY のソート方向の非推奨化)
- v2.12.3 の節を追加 (Xml::build() の SSRF 修正、Cookie の
- SimpleTest から PHPUnit 3.7 への移行
- 題を「SimpleTest から PHPUnit 3.7 への移行」に変更し、PHPUnit 9.6 への移行ガイドへのリンクを追加
その他
- Welcome
- サポート対象外の警告をフォーク向けに書き換え (本家では EOL、新規は CakePHP 5)
- PDF/EPUB ダウンロードの案内を削除し、ソースへのリンクとインストールの項目を追加
