カテゴリ: CakePHP

ページ: << 1 2 3 4 5 6 7 8 >>

PHP 5.3だとCakePHPで大量のエラー

パーマリンク 2009/07/30 19:23:46 著者: kumaold メール
カテゴリ: プログラミング, PHP, CakePHP

現在開発中のCakePHP2とかcake3がどんなものか気になって、とりあえず試しに動かしてみることにしました。

ところが、cake3の方は今のテスト鯖のPHP 5.2.6環境だと「namespace cake;」のところでエラーが出てしまって動きません。

PHPの名前空間のサポートは5.3~のようです。
そこで先月末にリリースされたばかりのPHP 5.3に早速アップデート。


…すると、既存のCakePHP 1.2環境がひどいことに。
こんな感じのエラーが大量発生です。

Deprecated: Assigning the return value of new by reference is deprecated

これを出さなくするには、cake/libs/configure.phpの290行目あたりにこんな感じに3行ほど追加してやればいいそうです。

if (isset($config['debug'])) {
    if ($_this->debug) {
        error_reporting(E_ALL);
      //この下のif文を追加する
        if (error_reporting() > 6143) {
            error_reporting(E_ALL & ~E_DEPRECATED);
        }

しかし、これでもまだエラーが完全に消えたわけではありません。

そこで、PHP 5.3からはE_DEPRECATEDというエラー定数?ができたらしいので、php.iniを以下のように変更

error_reporting  =  E_ALL & ~E_NOTICE
 ↓
error_reporting  =  E_ALL & ~E_NOTICE & ~E_DEPRECATED

とりあえずE_DEPRECATEDを無視してやればよさそうなので一時しのぎ。

E_DEPRECATED

実行時の注意。これを有効にすると、 将来のバージョンで動作しなくなるコードについての警告を受け取ることができる。

本当は出すようにした方がいいと思うけど当分はこれで放置。
 

参考記事: floatingdays - PHP5.3だと CakePHPで Deprecatedエラーが出まくる問題の対処方法

1ページ内で複数レコード用のフォーム

パーマリンク 2009/07/22 14:44:51 著者: kumaold メール
カテゴリ: 仕事, プログラミング, PHP, CakePHP

CakePHPで管理画面などを作っていくと、普通にやろうとすると1ページで1レコードの入力フォームしか対応できません。

1ページで複数レコードに対応するフォームとバリデーションを作れないかと、本日は試行錯誤してみました。

/* View */

<?php e($form->create(null, array('action' => 'check'))); ?> 
<?php for ($i = 0; $i <= 2; $i++): ?>
<?php   e($form->text("Model.{$i}.field_name")); ?> 
<?php   e($form->error("Model.field_name_{$i}")); ?> 
<?php endfor; ?>
<?php e($form->end()); ?>

とりあえず適当に3レコードの入力画面を作ります。

ここで、$form->error の項目名(?)が Model.{$i}.field_name でないのは、普通に書くとバリデーションエラーが出力されないため、小細工をします。

これをPOSTするとControllerではこのようになります。

Array
(
    [Model] => Array (
        [0] => Array (
            [field_name] => ...
        )
        [1] => Array (
            [field_name] => ...
        )
        [2] => Array (
            [field_name] => ...
        )
    )
)

Modelのバリデーションルールは今まで通り普通に書きます。(省略)

バリデーションエラーが出力されない理由はおそらく、FormHelperで項目名に.が入っているとModel名の区切りと誤認識するからかと思います。

そこで仕方なく項目名をエラー用に_でつなげて、エラー時にはControllerで本来の項目名から対応するエラー用の方にinvalidate()で変換しています。

/* Controller */

// 各データごとにバリデーション
foreach ($this->data['Model'] as $key => $value) {
    $this->Stage->set(array('Model' => $value));
    if (!$this->Model->validates()) {
        // バリデーションエラーを表示用に変換
        $errors = $this->Model->invalidFields();
        foreach ($errors as $field => $error) {
            $this->Model->invalidate("{$field}_{$key}", $error);
        }
        $error_flg = true;
    }
}

// エラーがあれば入力画面再表示
if (isset($error_flg)) {
    $this->render('edit');
}

こうすることで基本的な構造を変えずに複数レコードを1画面で入力でき、バリデーションエラーも各レコードで独立して表示できます。
 

CakePHP1.2ガイドブックCakePHP1.2ガイドブック
安藤 祐介
毎日コミュニケーションズ 2009-06-27
売り上げランキング : 8145
おすすめ平均
type="text/javascript">
type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

CakePHP1.2ガイドブック

パーマリンク 2009/06/17 19:27:22 著者: kumaold メール
カテゴリ: 新情報いろいろ, PHP, CakePHP

CakePHP 1.2 ガイドブック 6月27日発売!

やっとって感じですが、CakePHP 1.2に正式対応したガイドブックが出るようです。

昨年末にリリースされたver.1.2は、前バージョン1.1から1年以上を費やしてのバージョンアップ版で、実際に生成されるコード、必要になるソースコードなどが大幅に改良されています。また、サイト構築の要となる権限管理をするAuthComponentやShell機能、多言語対応機能il8nなど新たな機能も実装され、より効率的に開発できるフレームワークとなっています。


352ページ → 400ページ

従来のガイドブック比50ページ増で、値段据え置き3,360円はありがたいにしてもやっぱり高いなぁ。

CakePHP1.2ガイドブックCakePHP1.2ガイドブック
安藤 祐介

毎日コミュニケーションズ 2009-06-27
type="text/javascript">
type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

<< 1 2 3 4 5 6 7 8 >>

一六社で働くITエンジニアのブログ。

普段はWeb系システム開発と地元のPCサポートをやってます。いつの間にやら会社に8年目。
技術ネタ中心に日々の仕事と生活と趣味やらを気が向いたら書いてます。

2017年3月
 << <   > >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

検索

XMLフィード

16ブログ     powered by b2evolution free blog software