我有一个与此类似的代码来处理表单提交:
use \my-project\web\models\forms\RegisterOrganizationForm;
...
var_dump($_POST);die();
$model=new LoginForm;
if(isset($_POST['LoginForm']))
$model->attributes=$_POST['LoginForm'];
var_dump的输出是(嗯,只是关于表单值的部分):
[ “\我的项目\幅\模型\形式\ LoginForm的”] => array(1){...
正如你所看到的那样添加了命名空间(我没想到这个......),所以,当vardumping时我怎么能得到这样的东西?:
["LoginForm"]=> array(1) {...
Javier
答案 0 :(得分:1)
首先,在将模型属性设置为表单接收的数据之前调用die()。
其次,您正在var_dump
$_POST
而不是var_dump
$_POST['LoginForm']
如果你想看看从表单发回的内容,你想要使用firebox的firebug工具或chrome中的开发人员工具
,那么你为什么要做一个var_dump?答案 1 :(得分: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.']';
}
希望这有帮助!
P.S。对于那些认为这是愚蠢或不必要的人,客户端验证器不起作用,因为你不能使用带有反斜杠的ID选择一个元素(或者至少使用jQuery)