2014-04-08 116 views
2

在我的web應用程序中,工作流程要求我應該從另一個功能調用一個控制器功能 我應該添加額外的代碼還是要進行一些配置?現在這是我實現的。但是當我點擊「保存」按鈕時,沒有任何事情發生,值只是從窗體中變空。Yii從另一個控制器調用控制器功能

我的代碼。我想在「ProducerOfferController」裏面創建一個「BookVegetable」模型的對象。 我producerOffer控制器內部代碼

public function actionCreate() 
{ 
    //$book_vegetable=new BookVegetable; 
    $model=new BookVegetable; 
    if(isset($_POST['BookVegetable'])) 
    { 
     $model->attributes=$_POST['BookVegetable']; 
     $model->booked_by = Yii::app()->user->id; 
     $model->save(); 
     if ($model->hasErrors() === false) 
     { 
      $this->redirect(Yii::app()->user->returnUrl); 
     } 
    } 
    else 
    { 
     Yii::app()->user->setReturnUrl($_GET['returnUrl']); 
    } 
    $this->render('book',array('model'=>$model,)); 
} 

我對代碼視圖

<div style='padding-left:50px'> 
    <?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm',array('id'=>'non-ajax_form','enableAjaxValidation'=>false,)); ?> 
    <p class="help-block">Fields with <span class="required">*</span> are required.</p> 

    <?php echo $form->errorSummary($model); ?> 
    <?php echo "<br>" ?> 


    <?php echo CHtml::textField("booked_quantity",$model->booked_quantity); ?> 

我的情況

public function actionBookvegetable($id){ 
    $BookVegetable=new BookVegetable; 
    $model=$this->loadModel($id); 
    if(isset($_POST['ProducerOffer'],$_POST['BookVegetable'])) 
    { 

     $model->attributes=$_POST['ProducerOffer']; 
     $BookVegetable->attributes=$_POST['BookVegetable']; 
     $BookVegetable->booked_by=Yii::app()->user->id; 
     $BookVegetable->producer_offer_id=$model->id; 
     $model->save(); 
     $BookVegetable->save(); 

     if (($model->hasErrors() === false)||($BookVegetable->hasErrors()=== false)) 
     { 
      $this->redirect(Yii::app()->user->returnUrl); 
      } 
    } 
     else 
     { 
      Yii::app()->user->setReturnUrl($_GET['returnUrl']); 
     } 
     $this->render('book',array('model'=>$model,'BookVegetable'=>$BookVegetable)); 
     } 






<div class="form-actions"> 
    <?php $this->widget('bootstrap.widgets.TbButton', array('buttonType'=>'submit', 'type'=>'primary', 'label'=> 'Save',)); ?> 

我應該如何解決這個問題?它是必不可少的,在保存之前將該網址添加任何額外的東西用另一個控制器 裏面一個控制器動作及其後我按保存也

http://localhost/xxx/producerOffer/bookvegetable/20?returnUrl=%xxx%2FproducerOffer%2Fmanage 
+0

你想要做什麼,並告訴我在哪一點動作創建你需要訪問另一個控制器動作和你引用的其他控制器動作的代碼是什麼。 tnx – dev1234

+0

「ProducerOffer」控制器內部我想使用「BookVegetable」控制器的創建動作。我的場景就像我想從兩個模型中獲取數據。對於一個模型「ProducerOffer」它的現有記錄和「BookVegetable」它是創建操作。我將添加完整代碼 – user2492854

+0

我已添加完整代碼。 「ProducerOffer」的代碼正在工作,但是當我使用「BookVegetable」控制器的創建操作時,它不起作用,當我點擊保存時,它變成空的 – user2492854

回答

0

根據你提供的信息。當你去這裏一樣,

http://xxx.yyy.zzz/xxxx/producerOffer/create

實際上它應該表現出你的書的形式,當你點擊保存有按鈕,轉到RETURNURL。 (Yii :: app() - > user-> returnUrl);這個函數返回一個數組,並且返回一個數組。

我建議你寫下面的,

$model->save(); 
$BookVegetable->save(); 

if (($model->hasErrors() === false)||($BookVegetable->hasErrors()=== false)) 
{ 
    $this->redirect(Yii::app()->user->returnUrl); 
    } 

到,

if($model->save() && $BookVegetable->save()) 
    $this->redirect('yourAction'); //if params needed, $this->redirect(array('yourAction', 'id' => $model->id)); 

當你走在這裏,http://xxx.yyy.zzz/xxxx/producerOffer/bookvegetable

什麼都你ActionBookvegetable下編寫的代碼就會觸發。

要提交正確,請更改此代碼

$model->save(); 
if ($model->hasErrors() === false) 
{ 
    $this->redirect(Yii::app()->user->returnUrl); 
} 

,以確保你的價值觀,

if($model->save()) 
    $this->redirect('yourAction'); 
else 
    print_r(getErrors()); 

這將打印任何錯誤,這就是從保存模型阻止。讓我知道你嘗試了這個。

+0

是我試過它沒有顯示錯誤,它是一樣的。實際上,我想要的是actionBookvegetable($ id),actioncreate只是用於追蹤錯誤的來源。我編輯了代碼,但它在輸出中沒有任何區別。 – user2492854

0

在我的工作中,我有很多關於控制器中「loadModel」例程的邏輯,以確保登錄的用戶可以訪問特定的模型。我發現這從另一個控制器工作時,我需要訪問模型,而無需移動或重新複製loadmodel程序:

$caseviewController = Yii::app()->createController('Caseview'); 
//use this method from caseview controller to securley load case view model 
$caseview = $caseviewController[0]->loadModel($caseviewid); 
0

一種方式Yii2

做到這一點

背景

在SiteController動作索引方法中,從另一個稱爲voyzes的模型中獲取所有對象的記錄。

在SiteController

包括其他的模型前。 Voyzes

enter image description here

現在在SiteController動作指數的方法,實現代碼訪問模型/ SQL/NoSQL的或任何東西,並設置一個數組中,並返回到視圖。例如。

enter image description here

現在在索引視圖,你應該從另一個模型有你的數據。

相關問題