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

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

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

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

Q&A

2回答

4096閲覧

cakephp2で複数モデルを利用するコントローラーでnon-objectエラーになる。

tesopgmh

総合スコア146

CakePHP

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

0グッド

0クリップ

投稿2015/11/23 14:12

お世話になります、cakephp2で
使用モデルを定義しているのに「non-object」エラーとなってしまいます
ページは原因切り分けのため一つのモデルを使っていますが、これから複数のモデルを使用します

モデルを置くべき階層にモデルを用意して

/app/Model/DtbQuestion.php

内容には明示的に自身の名前を定義し

class DtbQuestion extends AppModel {
public $name = 'DtbQuestion';
public $validate = array(
//メールアドレス
'email' => array(
'rule1' => array(
'rule' => 'notEmpty',
'message' => '▲メールアドレスは必須です。',
),
'rule2' => array(
'rule' => 'email',
'message' => '▲メールアドレスの形式で入力して下さい。'
),
),

);

}

コントローラーを置くべく階層にコントローラーを用意し

/app/Controller/FooController.php

内容には使用モデルを明記して

class FooController extends AppController {
//使用モデル
public $uses = array('DtbQuestion');

public function huga(){ if ($this->request->is('post')){ //バリデーション $this->**DtbQuestion**->set($this->request->data); //if(!$this->DtbQuestion->validates()){ //バリデーションに失敗した場合は処理停止 //$this->Session->setFlash('登録内容に誤りがありますので修正してください。', 'Information/alert'); //$this->render(); //return; //} }

}

hugaページでポストすると
以下の様なエラーとなってしまいます

Error: Call to a member function set() on a non-object
File: /app/Controller/FooController.php
Line: XX

DtbQuestionをデバッグすると
debug($this->DtbQuestion)

NULL

となるのでうまく「DtbQuestion」がロードされていない模様です

別のページは同じ記述方法でうまくバリデーションが動いているのですが
どこの記述方法が間違っているのでしょうか??

また、cakephpをいじっていると
エラーが大雑把でなにが悪いのかよく分からないことが多いのですが
ベテランの方はこういった場合どう対処するのかもお教えいただけたら嬉しいです

よろしくお願い申し上げます

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

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

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

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

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

guest

回答2

0

>ベテランの方はこういった場合どう対処するのかもお教えいただけたら嬉しいです

ベテランというほどCakeをいじっていませんが、controllerからmodelを呼び出せないケースは、$usesの設定忘れや、クラス名称の誤りがほとんどだと思っているので、そのあたりを入念にチェックします。
それでもダメな場合は、eclipseでデバッガを動かして、Cake側の処理をトレースしてみます。

投稿2015/11/24 01:01

編集2015/11/24 01:16
KatsumiTanaka

総合スコア924

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

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

tesopgmh

2015/11/24 03:41

回答ありがとうございます $usesの設定はしておりますし、クラスも記述のとおりです CakePHPははじめて触ったんですが、サイトによってcontrollerを複数形にしていないのをよく見るのですが。$usesで指定することで問題はなくなるんですよね?? 複数形にしていない例 http://qiita.com/tom-18-358/items/2cf4994763aed50690b1 http://book.cakephp.org/2.0/ja/getting-started/cakephp-conventions.html 試しに、コントローラー名をFoosにしましてが問題は解決されませんでした。
KatsumiTanaka

2015/11/24 03:47

そうですね。 このcontrollerの名称の件は、自分もよくハマります。 最終的には、TRYandERRORを繰り返して、解決していますが・・・ あと、PHPの場合は変数名の設定ミスについても、言語の特性上変数の定義を必要としないので、問題なく動作してしまいます。 そのため、変数名もチェックポイントだと思います。
guest

0

モデル名と実際のテーブル名が一致していない、ということはありませんか?
その場合、Modelの$useTableプロパティで実際のテーブル名を指定してやる必要があります。
http://book.cakephp.org/2.0/ja/models/model-attributes.html#usetable

Before

php

1class DtbQuestion extends AppModel { 2 public $name = 'DtbQuestion'; 3 4 ...

After

php

1class DtbQuestion extends AppModel { 2 public $name = 'DtbQuestion'; 3 4 public $useTable = '【実際のテーブル名】'; 5 6 ...

投稿2015/11/24 03:57

KiyoshiMotoki

総合スコア4791

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問