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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

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

Q&A

解決済

2回答

1777閲覧

Cakephpでモデルのテーブルをコントローラに落とし込めていない。

tranders1990

総合スコア25

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

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

0グッド

0クリップ

投稿2017/08/16 08:04

お世話になります。

http://webcake.no003.info/event/cakephp2-8hours-seminar.html
上記のサイトの6と全く同じ内容でデータベースの設定・テーブルの設定・Viewの設定・コントローラの設定を行いました。
コントローラの名前だけGreen1という名前に書き換えています。
Green1Controller.phpのコードは下記になります。

<?php class Green1Controller extends AppController { /*使用するモデルを指定*/ public $users = array('Posts'); /*自動レンダリング無効*/ public $autoRender=false; /** * indexアクション */ public function index() { //全件取得 $data = $this->find('all'); //デバッグ表示 debug($data); } } そしたら表示されなくて何が原因かわかっていません。 Apacheのエラーログは下記になります。 Wed Aug 16 16:55:43.380566 2017] [:error] [pid 13288:tid 1920] [client ::1:64942] PHP Fatal error: Call to undefined method Green1Controller::find() in C:\\xampp\\htdocs\\cakephp2\\app\\Controller\\Green1Controller.php on line 19 エラーで出ているのは、$data = $this->find('all'); になります。 アドバイスいただければ幸いです。 よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

手元に環境がないため未検証の回答となりますが、

以下のように修正してみてください。

Before

php

1<?php 2class Green1Controller extends AppController { 3 4 public $users = array('Posts'); 5 6 public $autoRender=false; 7 8 public function index() { 9 10 $data = $this->find('all'); 11 12 debug($data); 13 } 14}
After

php

1<?php 2 3App::uses('AppController', 'Controller'); // 追加(無くても動くかもしれないが、念のため) 4 5class Green1Controller extends AppController { 6 7 // public $users = array('Posts'); 8 public $uses = array('Posts'); // $users ではなく $uses 9 10 public $autoRender=false; 11 12 public function index() { 13 14 // $data = $this->find('all'); 15 $data = $this->Posts->find('all'); 16 17 debug($data); 18 } 19}

投稿2017/08/16 09:36

KiyoshiMotoki

総合スコア4791

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

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

tranders1990

2017/08/16 09:42

ご回答ありがとうございます。 コピペしてみましたが、動かなかったです。 Apacheのエラーログは以下になりました。 [Wed Aug 16 18:09:26.043062 2017] [:error] [pid 13288:tid 1936] [client ::1:49493] PHP Fatal error: Call to a member function find() on null in C:\\xampp\\htdocs\\cakephp2\\app\\Controller\\Green1Controller.php on line 19
KiyoshiMotoki

2017/08/16 09:51

正しく私のコードをコピペしたのであれば、 19行目にそのエラーが発生するはずがありません。 なぜなら、私のコードの 19行目は '}' のみだからです。 コードの一部だけをコピーするのではなく、まずは丸ごとコピーして実行してください。
tranders1990

2017/08/16 09:56

もう一度やり直して実行してみました。 状況は好転しませんでしたが、Apacheのエラーログにエラーは出なくなりましたが、CakePHPのtmpファイルのエラーログは以下の通りで出ておりました。 Request URL: /cakephp2/green1Controller.php Stack Trace: #0 C:\xampp\htdocs\cakephp2\app\webroot\index.php(118): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse)) #1 {main} 2017-08-16 18:53:04 Error: [MissingControllerException] Controller class Green1Controller.phpController could not be found. Exception Attributes: array ( 'class' => 'Green1Controller.phpController', 'plugin' => NULL, ) Request URL: /cakephp2/green1Controller.php Stack Trace: #0 C:\xampp\htdocs\cakephp2\app\webroot\index.php(118): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse)) #1 {main} アドバイスよろしくお願いいたします(汗)
KiyoshiMotoki

2017/08/16 10:04

リクエストURL に Controller.php をつけてはいけません。  Before : /cakephp2/green1Controller.php  After : /cakephp2/green1 仕組みを理解しないままサンプルコードのカスタマイズをしても、今回のようにハマるだけです。 何かを理解したいなら、その何かの公式のマニュアルやドキュメントを参照するようにしてください。 https://book.cakephp.org/2.0/ja/controllers.html
tranders1990

2017/08/17 01:11

ありがとうございます。 公式マニュアルをわかるまで見るようにします。 ご親切にお答えいただいてありがとうございます。
guest

0

本来ならここは何かしらのモデル(であらわされるentity)の全件取得ですから、そもそも $this->find() であることがおかしいです。

通常は

PHP

1// CakePHP 2.x 2$data = $this->{モデル}->find('all'); 3 4// CakePHP 3.x 5$data = TableRegistry::get(テーブル名)->find()->all();

のようになるのですが。

※CakePHP では 2 と 3 で ORM 周りがごっそり変わっていますので、バージョンは明記してください

投稿2017/08/16 08:22

編集2017/08/16 08:27
tacsheaven

総合スコア13703

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

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

tranders1990

2017/08/16 08:24

ご回答ありがとうございます。 バージョンは2.10.1になります。 なので、cakephp2を学んでおります。
tranders1990

2017/08/16 09:44

$data = $this->{モデル}->find('all'); を入れてやってみても、ダメでした・・・ エラーログも読んでいるのですが・・・・修正できずにいます(汗)
tacsheaven

2017/08/16 09:54 編集

{モデル}のところは、全件取得したいモデルの名前が入るんですよ? モデルが Posts なら $data = $this->Posts->find('all'); です。 https://book.cakephp.org/2.0/ja/models.html も読んで、何が足りないのかよく見てみてください。
tranders1990

2017/08/17 01:10

コメントありがとうございます。 $data = $this->Posts->find('all'); でやってみても動かず、tacsheaven様に変身したようなエラーログが、tmpのエラーログに書き出されていました。 cakephpのマニュアルをわかるまで見るようにします。 ありがとうございます。
tranders1990

2017/08/17 01:13

ご親切にご回答していただいてありがとうございます。 全権取得したいModelの名前を入れてやってみましたが、それでもだめだったのです。 なので、何がダメなのか理解できていないまま進むのはまずいと思うのでまずは公式マニュアルをじっくり読んで理解してから再TRYしてみたいと思います。 ご親切にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問