質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

1323閲覧

cakePHPとDBのテーブルの関係

earnest_gay

総合スコア615

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2016/08/26 04:24

下記はcakePHPのbakeで生成されたindex.ctpです。

cakePHPを使いはじめて1週間ぐらいなのであまりわからないのですが、DBからの出力を辿っていくと、

foreach ($posts as $post)

$post['Post']['id']のように出力していて
仕組みが知りたくて辿って行ってるのですが
$postsに代入している記述( foreach ($posts as $post)
から前の記述)が見当たりません。

テーブルはpostsとauthorsを作ってbakeしてできたファイルなので何も考えずにテーブル名がそのまま使えるのかと思うのですがどうなんでしょうか。

<div class="posts index"> <h2><?php echo $this->Html->link('物件一覧', array('action' => 'index')); ?></h2> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th><?php echo $this->Paginator->sort('id','ID'); ?></th> <th><?php echo $this->Paginator->sort('title','タイトル'); ?></th> <th><?php echo $this->Paginator->sort('body','本文'); ?></th> <th><?php echo $this->Paginator->sort('author_id','作者'); ?></th> <th><?php echo $this->Paginator->sort('created','作成日'); ?></th> <th><?php echo $this->Paginator->sort('modified','更新日'); ?></th> <th class="actions"><?php echo __('操作'); ?></th> </tr> </thead> <tbody> <?php foreach ($posts as $post): ?> <tr> <td><?php echo h($post['Post']['id']); ?>&nbsp;</td> <td><?php echo h($post['Post']['title']); ?>&nbsp;</td> <td><?php echo h($post['Post']['body']); ?>&nbsp;</td> <td> <?php echo $this->Html->link($post['Author']['name'], array('controller' => 'authors', 'action' => 'view', $post['Author']['id'])); ?> </td> <td><?php echo h($post['Post']['created']); ?>&nbsp;</td> <td><?php echo h($post['Post']['modified']); ?>&nbsp;</td> <td class="actions"> <?php echo $this->Html->link(__('閲覧'), array('action' => 'view', $post['Post']['id'])); ?> <?php echo $this->Html->link(__('編集'), array('action' => 'edit', $post['Post']['id'])); ?> <?php echo $this->Form->postLink(__('削除'), array('action' => 'delete', $post['Post']['id']), array('confirm' => __('Are you sure you want to delete # %s?', $post['Post']['id']))); ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <p> <?php echo $this->Paginator->counter(array( 'format' => __('Page {:page} of {:pages}, showing {:current} records out of {:count} total, starting on record {:start}, ending on {:end}') )); ?> </p> <div class="paging"> <?php echo $this->Paginator->prev('< ' . __('previous'), array(), null, array('class' => 'prev disabled')); echo $this->Paginator->numbers(array('separator' => '')); echo $this->Paginator->next(__('next') . ' >', array(), null, array('class' => 'next disabled')); ?> </div> </div> <div class="actions"> <h3><?php echo __('Actions'); ?></h3> <ul> <li><?php echo $this->Html->link(__('新規投稿'), array('action' => 'add')); ?></li> <li><?php echo $this->Html->link(__('投稿者一覧'), array('controller' => 'authors', 'action' => 'index')); ?> </li> <li><?php echo $this->Html->link(__('投稿者追加'), array('controller' => 'authors', 'action' => 'add')); ?> </li> </ul> 検索 </div>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

CakePHPでは、デフォルトでは「/Controller名/Action名」というURLでアクセスされます。
つまり、「/Example/someAction」というURLだった場合、

PHP

1class Example extends AppController { 2 public function someAction() { 3 } 4}

この処理が走るわけです。
そして、その処理の後で表示されるHTMLが「View」の中で定義されていて、上記の例の場合
「/View/Example/some_action.ctp」のようなファイルがHTMLとなって表示されます。

$postsは、Controllerの中で

PHP

1$posts = $this->Post->find(); 2$this->set('posts', $posts);

のような記述があって、取得→Viewに引き渡しされていると思います。
Controllerのソースをご確認ください。

投稿2016/08/26 04:53

kunai

総合スコア5405

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coba-coba

2016/08/26 15:59

横からすみません。kunaiさんのおっしゃることへの追記です。 bakeとdynamic scaffoldingの話です。 rentoさんはbakeでコントローラーを作成する際にdynamic scaffoldingを使うよう選択しているかもしれません。 dynamic scaffoldingを選択すると、「コントローラーを作成するだけ」で選択したテーブルの一覧表示や編集などができるようになります。 もしモデルやビューをbakeで作成してもそのビューは使われません。 また、この場合は作成したコントローラーにはpublic $scaffold;としかコードが出力されません。 処理の流れを追う場合はCakePHPコアのコードを追うことになります。 一方で、簡単に処理の流れを追いたいならbakeでコントローラーを作成する際に ・dynamic scaffoldingを「使わない」よう選択し、 ・index()・add()・edit()・delete()を作成するよう選択 すると、出力したコントローラーにコードが出力されます。 kunaiさんのおっしゃる通りの手順で確認してみてください。 なお、この方法で出力する場合は、更にモデルとビューを作成する必要があります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問