0

フォームの送信を処理するために、次のようなコードがあります。

use \my-project\web\models\forms\RegisterOrganizationForm;
...
var_dump($_POST);die();
$model=new LoginForm;
if(isset($_POST['LoginForm']))
    $model->attributes=$_POST['LoginForm'];

その var_dump の出力は (まあ、フォームの値に関する部分だけです):

["\my-project\web\models\forms\LoginForm"]=> 配列(1) {...

ご覧のとおり、名前空間が追加されました (私はこれを予期していませんでした..)。

["LoginForm"]=> array(1) {...

ハビエル

4

2 に答える 2

1

私はあなたと同じ問題を抱えていました。

次のファイルにパッチを適用します。

/path/to/yii/framework/web/helpers/CHtml.php

メソッド「resolveName」を見つけて、次のように置き換えます。

/**
 * Resolves a class name, removing namespaces.
 */
public static function resolveClassName($model){
    return end(explode('\\',get_class($model)));
}

/**
 * Generates input name for a model attribute.
 * Note, the attribute name may be modified after calling this method if the name
 * contains square brackets (mainly used in tabular input) before the real attribute name.
 * @param CModel $model the data model
 * @param string $attribute the attribute
 * @return string the input name
 */
public static function resolveName($model,&$attribute)
{
    if(($pos=strpos($attribute,'['))!==false)
    {
        if($pos!==0)  // e.g. name[a][b]
            return self::resolveClassName($model).'['.substr($attribute,0,$pos).']'.substr($attribute,$pos);
        if(($pos=strrpos($attribute,']'))!==false && $pos!==strlen($attribute)-1)  // e.g. [a][b]name
        {
            $sub=substr($attribute,0,$pos+1);
            $attribute=substr($attribute,$pos+1);
            return self::resolveClassName($model).$sub.'['.$attribute.']';
        }
        if(preg_match('/\](\w+\[.*)$/',$attribute,$matches))
        {
            $name=self::resolveClassName($model).'['.str_replace(']','][',trim(strtr($attribute,array(']['=>']','['=>']')),']')).']';
            $attribute=$matches[1];
            return $name;
        }
    }
    return self::resolveClassName($model).'['.$attribute.']';
}

お役に立てれば!

PSこれがばかげている、または不要であると考える人にとっては、JavaScriptを使用して(または少なくともjQueryを使用して)バックスラッシュを使用してIDで要素を選択できないため、クライアント側のバリデーターは機能しません

于 2012-07-28T04:02:09.553 に答える
1

まず、モデル属性をフォームが受け取ったデータに設定する前に、die() を呼び出します。

2 番目にvar_dump$_POST代わりに do を実行していますvar_dump $_POST['LoginForm']

3番目に、フォームから何が返されているかを確認したい場合、なぜvar_dumpを実行したいのですか? FireFoxのfirebugやchromeの開発者ツールなどのツールを使用します

于 2012-06-06T14:15:53.780 に答える