我的控制器无法将变量返回到我的视图/管理员。
这是我的控制器:
public function actionAdmin()
{
$model=new Lunch('search');
$model->unsetAttributes(); // clear any default values
if(isset($_POST['Lunch'])) {
$model->attributes=$_POST['Lunch'];
// vanaf hier
$IDdate = $model->date;
'<pre>';
var_dump($IDdate);
'</pre>';
$this->redirect(array('Lunch/admin', 'id'=>$model->date));
//tot hier
}
$this->render('admin',array(
'model'=>$model,
));
}
&#13;
这是我的管理员:
<?php
$form = $this->beginWidget('CActiveForm', array(
'id'=>'date',
'enableAjaxValidation'=>true,
)); ?>
<?php echo $form->dropDownList($model, 'date',
CHtml::listData(Lunch::model()->findAll(), 'id', 'date'));?>
<?php echo CHtml::submitButton('Save', array("id"=>"submitLunch")); ?>
<?php $this->endWidget(); ?>
&#13;
我错了什么:(。 如果我给你的人少一些信息就说!
答案 0 :(得分:0)
当你使用&#34; ajax&#34;在您的表单中,您将获得一个包含&#39; ajax&#39;值。
所以,你可以试试这个:
public function actionAdmin(){
$model=new Lunch('search');
$model->unsetAttributes(); // clear any default values
$model->attributes=$_POST['Lunch'];
if (isset($_POST['ajax']) && $_POST['ajax'] === 'date-form') {
echo CActiveForm::validate($model);
Yii::app()->end();
}
//non-ajax code
$this->render('admin',array(
'model'=>$model,
));
}
&#13;
答案 1 :(得分:0)
基本上,CController的重定向方法尝试重定向用户,然后默认终止应用程序(请参阅方法的第二个参数,默认情况下为true)。
redirect(mixed $url, boolean $terminate=true, integer $statusCode=302)
这也使用HTTP标头进行重定向,这意味着您无法在此方法之前打印任何内容。如果您打印/回显任何内容,它也会将请求标头发送到客户端,因此重定向将失败,因为标头已经发送。
您必须删除此部分:
'<pre>';
var_dump($IDdate);
'</pre>';
它应该可以正常工作。
如果仍然无法解决您的问题,请检查Lunch
型号的验证规则。您必须为date
属性设置至少一个规则才能使$model->attributes = $_POST['Lunch'];
生效(它不会在没有任何规则的情况下分配'不安全'属性)
请将此rules
函数放入Lunch
模型中:
class Lunch extends CActiveRecord {
...
public function rules() {
return array(
array('date','length','max'=>255)
);
}
...
}
您可以在此处详细了解模型验证规则:http://www.yiiframework.com/wiki/56/ 希望这能解决你的问题!