「PHP」の版間の差分
(CakePHP) |
(View) |
||
3行目: | 3行目: | ||
=== Basic === | === Basic === | ||
==== Structure ==== | |||
* bin: cakeコマンド類。 | |||
* config: CakePHPの全体設定にかかるファイル群。 | |||
* logs | |||
* plugins | |||
* src | |||
* tests | |||
* tmp | |||
* vendor | |||
* webroot: アプリケーションルート。 | |||
===== Routing ===== | |||
Ref: [https://book.cakephp.org/3/ja/development/routing.html#index-0 ルーティング - 3.10]. | |||
config/routes.phpでルーティングの基本が設定される。ここのコードで、後述のMVCがある程度自動設定されている。 | |||
ほかに、アプリケーショントップの/アクセス時の処理を行う、重要な設定もここで行う。/はMVCの命名規則になっていないので、ここは手動設定?的なことが必要になる。基本はここがLoginになる。 | |||
Router::scopeとRouter::connectを使って処理する。 | |||
scopeはルーティングのグループ化。connectで個別に紐づける。<syntaxhighlight lang="php"> | |||
Router::scope('/blog', ['plugin' => 'Blog'], function ($routes) { | |||
$routes->connect('/', ['controller' => 'Articles']); | |||
}); | |||
</syntaxhighlight>例えば、上記は/blogへのアクセスをArticlesController.index()に紐づける。 | |||
connectの第二引数にいろいろパラメーターを指定できて、actionのメソッドを指定できたりする。 | |||
==== Controller ==== | ==== Controller ==== | ||
12行目: | 41行目: | ||
==== View ==== | ==== View ==== | ||
Ref: [https://book.cakephp.org/3/ja/views.html ビュー - 3.10]. | |||
Controllerで表示もできるものの、Viewで表示部分をメインにすることもできる。 | Controllerで表示もできるものの、Viewで表示部分をメインにすることもできる。 | ||
20行目: | 51行目: | ||
レイアウトを用意して、その中にビューテンプレートを埋め込んで表示するイメージ。これにより、ページ全体でレイアウトを統一しやすくなる。 | レイアウトを用意して、その中にビューテンプレートを埋め込んで表示するイメージ。これにより、ページ全体でレイアウトを統一しやすくなる。 | ||
テンプレートファイルのデフォルトの拡張子は.ctp (CakePHP Templateの略)。 | |||
===== Template ===== | |||
src/TemplateがViewテンプレート。ここにコントローラー名に対応したディレクトリーを作って、そこにViewテンプレートを作成する。 | src/TemplateがViewテンプレート。ここにコントローラー名に対応したディレクトリーを作って、そこにViewテンプレートを作成する。 | ||
29行目: | 63行目: | ||
index.ctpはテンプレートなので、ここにPHPコードを記入してもOK。 | index.ctpはテンプレートなので、ここにPHPコードを記入してもOK。 | ||
テンプレート内では変数が使える。この変数は、コントローラーで$this->setで設定されたものになる。 | |||
基本的には以下のようなphpコードで埋め込む。 | |||
<?php echo $variable; ?> | |||
<?= $variable ?> | |||
===== Layout ===== | ===== Layout ===== |
2024年4月2日 (火) 12:23時点における版
CakePHP
Basic
Structure
- bin: cakeコマンド類。
- config: CakePHPの全体設定にかかるファイル群。
- logs
- plugins
- src
- tests
- tmp
- vendor
- webroot: アプリケーションルート。
Routing
Ref: ルーティング - 3.10.
config/routes.phpでルーティングの基本が設定される。ここのコードで、後述のMVCがある程度自動設定されている。
ほかに、アプリケーショントップの/アクセス時の処理を行う、重要な設定もここで行う。/はMVCの命名規則になっていないので、ここは手動設定?的なことが必要になる。基本はここがLoginになる。
Router::scopeとRouter::connectを使って処理する。
scopeはルーティングのグループ化。connectで個別に紐づける。
Router::scope('/blog', ['plugin' => 'Blog'], function ($routes) {
$routes->connect('/', ['controller' => 'Articles']);
});
例えば、上記は/blogへのアクセスをArticlesController.index()に紐づける。
connectの第二引数にいろいろパラメーターを指定できて、actionのメソッドを指定できたりする。
Controller
AppControllerを継承して定義する。indexメソッドを最低限実装しておく。
XXXControllerのXXXの小文字部分がURLになっていて、これでアクセスするとindexが発動する。
メソッド名が、パスになっていて、それで表示される。このパスメソッドを一般的にacitonと呼んでいる。
View
Ref: ビュー - 3.10.
Controllerで表示もできるものの、Viewで表示部分をメインにすることもできる。
Viewはビューテンプレートとレイアウトで大きく構成される。
テンプレートは実際のページ表示用。レイアウトは、テンプレートを含み、ヘッダー、フッターなどをまとめている。
レイアウトを用意して、その中にビューテンプレートを埋め込んで表示するイメージ。これにより、ページ全体でレイアウトを統一しやすくなる。
テンプレートファイルのデフォルトの拡張子は.ctp (CakePHP Templateの略)。
Template
src/TemplateがViewテンプレート。ここにコントローラー名に対応したディレクトリーを作って、そこにViewテンプレートを作成する。
例えば、src/Template/Helloにindex.ctpを用意する。
Controller側で、public $autoRender = true;があると、テンプレートを使う。命名規則で自動的に。
そして、$this->viewBuilder()->autoLayout(false) でレイアウトの使用可否を設定する。
index.ctpはテンプレートなので、ここにPHPコードを記入してもOK。
テンプレート内では変数が使える。この変数は、コントローラーで$this->setで設定されたものになる。
基本的には以下のようなphpコードで埋め込む。
<?php echo $variable; ?> <?= $variable ?>
Layout
デフォルトで使用するレイアウトは、src/Template/Layout/default.ctpにある。
ここにファイルを追加することが、レイアウトの作成になる。
レイアウト内で、テンプレートを表示する関数類がある。
- $this->fetch('content'): ビューテンプレート
Controller側では、$this->viewBuilder()->layout('Hello');でレイアウトを指定できる。
Element
レイアウトよりも小さいパーツ。ボタンなど、流用するようなものをElementとして用意できる。
$this->element(エレメント名, [キー=>値,...])で表示できる。
src/Template/Element内に作成する。エレメント名.ctpで作成する。キー=>値の関係で、パラメーターを渡せる。
Controllerのaction内でsetで、layout内で使用する変数を指定できる。これで、layout-element間で変数を渡せる。
Model
DBを処理する部分。
具体的には、テーブルクラス (テーブルへのアクセス処理) とエンティティークラス (テーブルから取り出した1行分のデータのための列の表現) で実現する。
CakePHP内では、モデル名Table/モデル名でそれぞれ命名する。テーブルクラスは複数形、エンティティークラスは単数形で扱う。テーブル自体も複数形。
CakePHPでDBにアクセスする際には、まず設定ファイルにDBの情報を用意する。Config/app.phpのDatasourcesのdefaultに入力する。
モデル自体は、src/Model内に配置する。EntityとTableディレクトリーでそれぞれ用意する。
継承するだけで、基本的な動作は機能する。
Controllerから、これらのモデルにアクセスする。