「PHP」の版間の差分

提供:senooken JP Wiki
(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から、これらのモデルにアクセスする。