CakePHPの基礎知識整理

なんぞやについて

# CakePHPについて
Webアプリケーションフレームワーク
コンセプト：ケーキを焼く様に簡単にPHPで開発ができる

## おすすめポイント
[公式](https://book.cakephp.org/2/ja/cakephp-overview/what-is-cakephp-why-use-it.html)

### 利点
・同処理のコードを共通化でき、同じ処理を大量に修正するなどの必要がなくなる
・MVCモデル構造なので、機能が分離されており扱いやすい
・自分のプロジェクトを大幅に変更しなくても、プラグインのような感覚で機能を追加できる（かも）
・PEARライブラリ[^1]がいらない
・Ruby on Railsに移行しやすい

### 機能
一部

■ **O/Rマッピング**（テーブルアソシエーション）
オブジェクトとRDBのレコードを対応付けること
これによりレコードがオブジェクトとして直感的に扱えるようになるので、
RDBにアクセスする処理を簡単に書ける
→ O/Rマッパーを採用することによってSQL文書を書く必要がなくなった

■ **CRUD画面の自動生成**

■ **バリデーション（入力値検証）機能**
→ 入力チェック

■ **生成されたSQL文のデバッグ機能**

■ **Ajax、htmlなどの各種ヘルパー**
ヘルパー：ビューによって出力するさまざまな表示の作成をサポートしてくれる
（例）スタイルシートの読み込み
`<link rel="stylesheet" type="text/css" href="/cake3app/css/hello.css">`
↓
`$this->Html->css('hello');`

■ **セキュリティ、セッション、リクエストなどのコンポーネント**

■ **ACLによる認証システム**
Access Control List
通信アクセスを制限するためのリスト

■ **データのサニタイズ**
サニタイズ：悪い物を除去・変換して綺麗にする処理
→ 特別な意味を持つ文字の特別さを無効化

## フォルダ構成
```terminal
（empty省略）

├── 🗂bin                              -- 実行コマンド群
│   ├── cake
│   ├── cake.bat
│   └── cake.php
├── 🗂config                           -- 設定ファイル（DB接続関連等）
│   ├── 🗂schema
│   │   ├── i18n.sql
│   │   └── sessions.sql
│   ├── .env.default
│   ├── app.default.php
│   ├── app.php
│   ├── bootstrap_cli.php
│   ├── bootstrap.php
│   ├── paths.php
│   ├── requirements.php
│   └── routes.php
├── 🗂logs                             -- ログ出力場所
│   ├── cli-error.log
│   └── error.log
├── 🗂plugins                          -- プラグインパッケージ保存先
├── 🗂src                              -- 開発拠点
│   ├── 🗂Console     
│   │   └── Installer.php
│   ├── 🗂Controller                   -- コントローラ
│   │   ├── 🗂Component                -- コンポーネント
│   │   ├── AppController.php
│   │   ├── ErrorController.php
│   │   ├── [対象DB]Controller.php☆
│   │   └── PagesController.php
│   ├── 🗂Model                        -- モデル
│   │   ├── 🗂Behavior                 -- ビヘイビア
│   │   ├── 🗂Entity                   -- エンティティ
│   │   │   └── [対象DB].php☆
│   │   └── 🗂Table                    -- テーブル
│   │       └── [対象DB]Table.php
│   ├── 🗂Shell                        -- Shellファイル群
│   │   └── ConsoleShell.php
│   ├── 🗂Template                     -- ビューテンプレート
│   │   ├── 🗂Cell
│   │   ├── 🗂Element/Flash
│   │   │   ├── default.ctp
│   │   │   ├── error.ctp
│   │   │   └── success.ctp
│   │   ├── 🗂Email
│   │   │   ├── 🗂html
│   │   │   │   └── default.ctp
│   │   │   └── 🗂text
│   │   │       └── default.ctp
│   │   ├── 🗂Error
│   │   │   ├── error400.ctp
│   │   │   └── error500.ctp
│   │   ├── 🗂[対象DB]☆
│   │   │   ├── add.ctp
│   │   │   ├── edit.ctp
│   │   │   ├── index.ctp
│   │   │   └── view.ctp
│   │   └── 🗂Layout
│   │       ├── 🗂Email
│   │       │   ├── 🗂html
│   │       │   │   └── default.ctp
│   │       │   └── 🗂text
│   │       │       └── default.ctp
│   │       ├── 🗂rss
│   │       │   └── default.ctp
│   │       ├── ajax.ctp
│   │       ├── default.ctp
│   │       ├── error.ctp
│   │       └── 🗂Pages
│   │           └── home.ctp
│   ├── 🗂View
│   │   ├── 🗂Cell
│   │   ├── 🗂Helper
│   │   ├── AjaxView.php
│   │   └── AppView.php
│   └── Application.php
├── 🗂tests                            -- テストケース設置場所
│   ├── 🗂Fixture
│   │   └── [対象DB]Fixture.php☆
│   ├── 🗂TestCase
│   │   ├── 🗂Controller
│   │   │   ├── 🗂Component
│   │   │   ├── [対象DB]ControllerTest.php
│   │   │   └── PagesControllerTest.php
│   │   ├── 🗂Model
│   │   │   ├── 🗂Behavior
│   │   │   └── 🗂Table
│   │   │       └── [対象DB]TableTest.php
│   │   ├── 🗂View/Helper
│   │   └── ApplicationTest.php
│   └── bootstrap.php
├── 🗂tmp                             -- テンポラリ（省略）
├── 🗂vendor                          -- 外部ライブラリ等設置場所（省略）
├── 🗂webroot                         -- Web公開ディレクトリ
│   ├── 🗂css
│   │   ├── base.css
│   │   ├── home.css
│   │   └── style.css
│   ├── 🗂font
│   ├── 🗂img
│   └── 🗂js
├── .gitattributes
├── composer.json
├── composer.lock
├── index.php
├── phpunit.xml.dist
└── README.md
```

## CakePHPのMVCモデル
それぞれの使い方のリンク集

- [【CakePHP入門】Modelについて詳しく解説！ | 侍エンジニア塾ブログ](https://www.sejuku.net/blog/31534)
- [【CakePHP入門】ビュー(View)の基本〜便利機能を徹底解説！ | 侍エンジニア塾ブログ](https://www.sejuku.net/blog/30851)
- [【CakePHP入門】Controllerの主な処理をまとめました！ | 侍エンジニア塾ブログ](https://www.sejuku.net/blog/32347)


# 参考
1. [【初心者向け】PHPフレームワークのCakePHPとは？徹底解説 | WEBCAMP NAVI](https://web-camp.io/magazine/archives/5183)
2. [CakePHP3 HTMLヘルパーについて | Qiita](https://qiita.com/engineer_atsumi/items/204159b28bca044ad324)
3. [サニタイズ (sanitize)とは | 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word16265.html)


[^1]: PHPで利用する事ができるライブラリ（パッケージ）