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) {...

如您所见,已添加命名空间(我没想到会这样..),那么,当 vardumping 时,我怎样才能得到下面这样的东西??:

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

哈维尔

4

2 回答 2

1

首先,在将模型属性设置为表单接收到的数据之前调用 die()。

其次,您正在做的var_dump$_POST不是做var_dump $_POST['LoginForm']

第三,如果您想查看从表单发回的内容,为什么要执行 var_dump,请使用 FireFox 的 firebug 之类的工具或 chrome 中的开发人员工具

于 2012-06-06T14:15:53.780 回答
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 回答