2012年10月31日水曜日

Notice: Undefined index が消えない・・・なんで?

CakePHPをさわってて最初のエラー。
題名のとおり「Notice: Underfined index」が。。。


Windows+Apache+MySQLでは動いてるんですが、Mac+Apache+MySQLで上のような画面に。。。

やってることをデータベースに以下のテーブルを追加
CREATE  TABLE `cakephp`.`posts` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `title` VARCHAR(45) NOT NULL ,
  `description` TEXT NOT NULL ,
  `created` DATETIME NOT NULL ,
  `modified` DATETIME NOT NULL ,
  PRIMARY KEY (`id`) );

コントローラ(app/Controller/PostsController.php)
<?php
class PostsController extends AppController
{
    public $scaffold;
}
やってることはこれだけなんです。
登録はできてるのですが一覧がでないという現象。
何かの設定だとは思うんですが。。。

試しにNoticeなのでphp.iniで以下の設定を
error_reporting=E_ALL & ~E_NOTICE

変わらず。。。??

CakePHP側で制御やってるのかなと思ってConfigを見てたらそれっぽいのが。
    Configure::write('Error', array(
        'handler' => 'ErrorHandler::handleError',
        'level' => E_ALL & ~E_NOTICE,    // E_ALL & ~E_DEPRECATED
        'trace' => true
));

これでエラーは消えましたが何もでてきません。


何方か詳しいかた教えて下さい。

※途中経過
scaffoldではなくコントローラ・モデル・ビューを作って試してみました。
けど結果は同じ。エラーがでたので取得したデータを見てみると
Array
(
    [0] => Array
        (
            [0] => Array // ←ココがヘン!?
                (
                    [id] => 1
                    [title] => sample
                    [description] => sample description
                    [created] => 2012-10-31 11:32:46
                    [modified] => 2012-10-31 11:32:46
                )

        )

)

通常の動きであれば
Array
(
    [0] => Array
        (
            [Post] => Array // 0 ではなく Post
                (
                    [id] => 1
                    [title] => sample
                    [description] => sample description
                    [created] => 2012-10-31 11:32:46
                    [modified] => 2012-10-31 11:32:46
                )

        )

)

だと思うんですが。。。上の結果から
foreach ($posts as $post) {
    echo $post[0]['id'];      // OK
    echo $post['Post']['id']; // NG
}
なんでこんなことになるんだろうな。


※やっとこさ解決!!!
やっぱり環境まわりでした。
CentOSに一から環境を作りなおしたら同じ現象を再現できたのでいろいろ調べた結果。。。
ほんと凡ミスというか設定足らずなのかな。
PDOのインストールとかは特に問題なかったんですがpdo_mysqlのあと、phpのconfigureを再度やり直しただけ。
./configure \
 --with-pdo-mysql=/usr/local/mysql \
 ...

これを追記しただけ。
お騒がせしました。

※追記。。。
configureから再度やり直さなくてもphp.iniにMySQLのsocketを追記するだけでもOKでした。
pdo_mysql.default_socket=/tmp/mysql.socket



0 件のコメント:

コメントを投稿