2014-01-06 25 views
0

我的目標: 我想根據GET參數篩選模型,並基於此填充表單。Yii CActiveForm期望對象而不是數組

我需要是,當用戶選擇在GridView上 更新圖標我會

  1. 搶「電話號碼」,他們想要編輯,
  2. 填充地將telephoneNumber的數據表單
  3. 允許用戶編輯這個數據的電話號碼,並提交
  4. 然後,我運行自己的自定義SQL更新查詢基於新的數據。

我的問題 我的GridView可以成功捕捉選定行地將telephoneNumber。 它可以成功發送到控制器更新方法(見下文) 但是我不能根據此電話號碼過濾模型,然後用此模型填充表單。

我的錯誤

get_class() expects parameter 1 to be object, array given 

/framework/web/helpers/CHtml.php(2220) 
/framework/web/helpers/CHtml.php(2220): get_class(array()) 
/framework/web/helpers/CHtml.php(1236): CHtml::resolveName(array(), "TelephoneNumbers_TelephoneNumber") 
/framework/web/widgets/CActiveForm.php(562): CHtml::activeLabelEx(array(), "TelephoneNumbers_TelephoneNumber", array()) 
/views/dateAudiid/editupdateform.php(18): CActiveForm->labelEx(array(), "TelephoneNumbers_TelephoneNumber") 
/framework/web/CBaseController.php(126): require("/var/www/OMReport/protected/views/dateAudiid/editupdateform.php") 

這裏是我的GridView。

$this->widget('bootstrap.widgets.TbGridView', array(
    'id'=>'dateaudiidcondensed-grid', 
    'dataProvider'=>$model->search(), 
    'filter'=>$model, 
    'columns'=>array(
     array(
      'class'=>'bootstrap.widgets.TbButtonColumn', 
      'template'=>'{update}', 
      'buttons'=>array 
      (
       'update' => array 
       (
       'url'=>'Yii::app()->createUrl("dateAudiid/Update/",array("TelephoneNumbers_TelephoneNumber"=>$data->TelephoneNumbers_TelephoneNumber))', 
       ), 

      ), 
     ), 
     'TelephoneNumbers_TelephoneNumber', 
     'FormId_Formid', 
     'Date', 
     'AudibeneID_Audibene_ID' 
    ), 
)); 

這裏是我的控制器

public function actionUpdate($TelephoneNumbers_TelephoneNumber) 
{ 

    $criteria=new CDbCriteria; 
    $criteria->compare('TelephoneNumbers_TelephoneNumber',$_GET['TelephoneNumbers_TelephoneNumber'],true); 
    $criteria->limit = 1; 
    $criteria->offset = 1; 
    $model = DateAudiidCondensedByAudibeneId::model()->findAll($criteria); 
    $this->render('editupdate',array('model'=>$model)); 

} 

這裏是我查看

<?php 
/* @var $this DateAudiidController */ 
/* @var $model DateAudiidCondensedByAudibeneId */ 

?> 

<h1>Update Assignments </h1> 

<?php echo $this->renderPartial('editupdateform', array('model'=>$model)); ?> 

這裏是我的表

<div class="form"> 

<?php 
    $form=$this->beginWidget('CActiveForm', array(
    'id'=>'date-audiid-condensed-by-audibene-id-customupdate-form', 
    'enableAjaxValidation'=>false, 
)); ?> 

    <p class="note">Fields with <span class="required">*</span> are required.</p> 

    <?php 

    echo $form->errorSummary($model); ?> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'TelephoneNumbers_TelephoneNumber'); ?> 
     <?php echo $form->textField($model,'TelephoneNumbers_TelephoneNumber'); ?> 
    </div> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'FormId_Formid'); ?> 
     <?php echo $form->textField($model,'FormId_Formid'); ?> 
     <?php echo $form->error($model,'FormId_Formid'); ?> 
    </div> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'Date'); ?> 
     <?php echo $form->textField($model,'Date'); ?> 
     <?php echo $form->error($model,'Date'); ?> 
    </div> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'AudibeneID_Audibene_ID'); ?> 
     <?php echo $form->textField($model,'AudibeneID_Audibene_ID'); ?> 
     <?php echo $form->error($model,'AudibeneID_Audibene_ID'); ?> 
    </div> 


    <div class="row buttons"> 
     <?php echo CHtml::submitButton('Submit'); ?> 
    </div> 

<?php $this->endWidget(); ?> 

</div><!-- form --> 

我的思考/我已經試過到目前爲止

我返回模型作爲一個數組......但我想要的形式作爲一個對象。 我需要改變一些方式,在Controller Update操作中過濾我的模型,但我無法看到如何執行此操作。 我所有其他的方法都使用類似的模型過濾代碼。

回答

1

這裏是你可以做什麼來解決這個問題:

  1. 您的形式試圖使用模型的標籤,但你給一個數組,->findAll()將返回車型的陣列,在這裏你需要一個single object of model

  2. 您的錯誤是因爲$modelfilter您的網格需要成爲模型的對象,在這裏將嘗試使用此模型進行驗證,所以當您給它一個模型的陣列時不會工作,

  3. ,如果你想基於什麼來過濾結果,你需要做的這個地方被填充網格的dataprovider,所以在這種情況下,是在$model->search()

獲取參數並追加它到criteria

使網格看起來是這樣的:

$this->widget('bootstrap.widgets.TbGridView', array(
    'id'=>'dateaudiidcondensed-grid', 
    'dataProvider' => $model->search(), //create a new model with search scenario 
    'filter' => $model, // here use that model to validate fields 
    'columns'=>array(
     . 
     . 
     . 
    ), 
)); 

和你的模型的搜索方法:

public function search() { 
    $criteria = new CDbCriteria; 
    // grab the sent data and use it here 
    $tel = Yii::app()->request->getParam('TelephoneNumbers_TelephoneNumber' , null); 
    if(!empty($tel)) 
     $criteria->compare('TelephoneNumbers_TelephoneNumber' , $tel , true); 
    . 
    . 
    . 
    return new CActiveDataProvider($this, array(
     'criteria' => $criteria, 
    )); 
} 
+0

感謝您的答覆TinyByte ....它沒有爲我編輯模型,而是檢索模型的Controller方法。但是,無論如何感謝:-) –

-1

下面是最終爲我工作

的「findByAttributes」的使用情況,以篩選和返回模型的形式

public function actionUpdate($TelephoneNumbers_TelephoneNumber) 
    { 

     $model = DateAudiidCondensedByAudibeneId::model()->findByAttributes(array("TelephoneNumbers_TelephoneNumber" => $_GET['TelephoneNumbers_TelephoneNumber'])); 

     $this->render('editupdate',array('model'=>$model)); 

    } 
+0

爲什麼downvote? –

相關問題