aslan 2012-08-17 22:39:46 4549次浏览 3条回复 0 0 0

我理解的流程是这样的:

  1. 浏览器地址栏url是“.......entity/create”
  2. entityController 执行 actionCreate函数
public function actionCreate() {
  $model = new Entity;
  if (isset($_POST['Entity'])) {
    $model->setAttributes($_POST['Entity']);
     if ($model->save()) {
      if (Yii::app()->getRequest()->getIsAjaxRequest())
        Yii::app()->end();
      else
        $this->redirect(array('view', 'id' => $model->guid));
    }
  }
  $this->render('create', array( 'model' => $model));
}

上面actionCreate函数创建的 $model 被传递到 create.php

  1. create.php代码如下
<?php
$this->renderPartial('_form', array(
  'model' => $model,
  'buttons' => 'create'));
?>

$model 被传递到 _form.php

  1. _form.php 代码如下
<?php $form = $this->beginWidget('CActiveForm', array(
  'id' => 'entity-form',
  'enableAjaxValidation' => false,
));
?>
//.........
  <div class="row">
    <?php echo $form->labelEx($model,'description'); ?>
    <?php echo $form->textArea($model, 'description'); ?>
    <?php echo $form->error($model,'description'); ?>
  </div><!-- row -->
//...........
<?php
echo CHtml::submitButton(Yii::t('app', '提交'));
$this->endWidget();
?>
  1. 点击提交按钮后,entityController中的actionCreate再次执行,将 $model 中的数据保存到数据库。

如上面的流程描述,$model是在create页面打开时就已经被创建了,然后通过create.php一直传递到 _form.php,提交时再传回到actionCreate函数里并且保存到数据库。 这个流程理解的对么?

然后我有一个问题:

如果打开的页面不是entityController中actionCreate函数所渲染的页面(create.php),但是在这个页面(test.php)中,我写了:

<?php $form = $this->beginWidget('CActiveForm', array(
	'id' => 'entity-form',
        'action'=>'entity/create'
	'enableAjaxValidation' => true,
));
?>
//.............
<div class="row">
  <?php echo $form->labelEx($model,'description'); ?>  //这个$model在哪定义?
  <?php echo $form->textArea($model, 'description'); ?>  //这个$model在哪定义?
  <?php echo $form->error($model,'description'); ?>  //这个$model在哪定义?
</div><!-- row -->
//....................
<?php
echo CHtml::submitButton(Yii::t('app', 'Save'));
$this->endWidget();
?>

像这样,我提交表单时,就应该把数据提交到entityController的actionCreate函数,然后数据就能被保存到数据库了。 可是事实上,这个test.php中的 $model 并不是由entityController中的actionCreate函数传递来的。 那我这个 $model 要在那里定义呢?在test.php里定义么?

  • 回复于 2012-08-17 22:59 举报

    我晕,我知道了,直接在test.php里面创建。。。。

    <?php 
    $form = $this->beginWidget('CActiveForm', array(
        'id' => 'entity-form',
        'action'=>'entity/create'
        'enableAjaxValidation' => true,
    ));
    $entity = new Entity;
    ?>
    
  • 回复于 2012-08-17 23:03 举报

    不对啊。
    唉,
    还是等高手来解答吧。

  • 回复于 2012-08-18 22:30 举报

    $model = new Entity;这样试试。

您需要登录后才可以回复。登录 | 立即注册