将PHP变量传递给控制器​​并将其恢复

时间:2013-05-23 15:00:57

标签: php javascript ajax yii

我有一个变量,我想更新控制器中的值,并根据值渲染页面的一部分。

这在第一次工作得很好,但变量没有得到值,留在第一次。这是我的代码:

型号:

public function actionCreate()
{
    $model=new CadTeste;
    $teste=1;

    if(isset($_POST['CadTeste']))
    {
        $model->attributes=$_POST['CadTeste'];
        if($model->save())
            $this->redirect(array('view','id'=>$model->icd_teste));
    }

    $this->render('create',array(
        'model'=>$model,
        'teste'=>$teste,
    ));
}

形式:

    <div id="data">
   <?php $this->renderPartial('_ajaxContent', array('teste'=>$teste)); ?>
</div>

<?php
echo CHtml::ajaxSubmitButton('Alterar Num',CController::createUrl('CadTeste/UpdateAjax'),
array('type'=>'POST',                               
      'data' => array('teste'=> $teste),
      'update' => '#data'          
          )
         ); ?>

控制器

public function actionUpdateAjax()
{
    $teste = $_POST['teste'];
    $teste += 10;
    $this->renderPartial('_ajaxContent', array('teste'=>$teste), false, true);
}

和_ajaxContent

<?php echo $teste; ?>

每次点击按钮,我都会得到值“11”而不是“11,21,31,41”。

我该怎么做?我应该每次在控制器中更改值吗?

2 个答案:

答案 0 :(得分:2)

尝试使用会话。这对我有用

查看档案

<?php Yii::app()->session['teste']=$teste ?>
<div id='data'>
 <?php $this->renderPartial('_ajaxContent', array('teste'=>$teste)); ?>
</div>
<?php
echo CHtml::ajaxSubmitButton('Alterar Num',$this->createUrl('CadTeste/UpdateAjax'),
array('type'=>'POST',                               
     // 'data' => array('teste'=> $teste),
      'update' => '#data'          
          )
 ); ?>

您的控制器

public function actionUpdateAjax()
    {
        $teste = Yii::app()->session['teste'];
        $teste += 10;
        $this->renderPartial('_ajaxContent', array('teste'=>$teste));
        unset(Yii::app()->session['teste']);
        Yii::app()->session['teste']=$teste;

    }

和你的模型一样

public function actionCreate()
{
    $model=new CadTeste;
    $teste=1;

    if(isset($_POST['CadTeste']))
    {
        $model->attributes=$_POST['CadTeste'];
        if($model->save())
            $this->redirect(array('view','id'=>$model->icd_teste));
    }

    $this->render('create',array(
        'model'=>$model,
        'teste'=>$teste,
    ));
}

不确定这是否是您的问题,但renderPartial()与AJAX不兼容。这是一个众所周知的Yii问题:

http://www.yiiframework.com/forum/index.php/topic/24699-yii-20-ajaxrenderpartial-conflict/

答案 1 :(得分:0)

尝试将此用于视图:

<?php
echo CHtml::ajaxSubmitButton('Alterar Num',CController::createUrl('CadTeste/UpdateAjax',array('teste'=>$teste)),
array('type'=>'POST',                               
      'update' => '#data'          
      )
); ?>

这对于控制器来说:

public function actionUpdateAjax($teste)
{
    $teste += 10;
    $this->renderPartial('_ajaxContent', array('teste'=>$teste));
}

这样你可以POST到action / ajaxupdate / teste / 1

它被称为Parameter Binding,$ teste中的参数会自动从网址中填充,如果它不存在,它会给你一个错误。 (您可以设置默认值$ teste = 1以使其可选)