2016-12-14 35 views
-1

從相關車型的另一種形式填寫一個表格的外鍵字段我有兩個相關的表(型號)[與主鍵id]和[案例與外鍵sub_id。我使用id=4創建了Sub。我想創建案例模型的數據在view.php(表格)子模型。我做了一個「創建案例」按鈕,它涉及Case模型的actionCreate在yii2

這是我在亞/ view.php「創建案例」按鈕:

<?= Html::a(Yii::t('app','Create Case'), ['/case/create', 'sub_id' => $model->id], ['class' => 'btn btn-primary']) ?> 

它看起來像在 picture

這個按鈕叫我去案例模型,其中的創建形式我應該得到的場sub_id = 4。現在我_form.php這個具有

<?= $form->field($model, 'sub_id')->textInput() ?> 

我應該改變什麼來取得編號自動填寫領域sub_id父模型?

更新:我從適當的視圖,控制器文件中添加了相關的代碼。 我沒有更改模型文件。

CaseController.php文件看起來像下面所示

class CaseController extends Controller 
{ 
    public function behaviors() 
    { 
     return [ 
      'verbs' => [ 
       'class' => VerbFilter::className(), 
       'actions' => [ 
        'delete' => ['POST'], 
       ], 
      ], 
     ]; 
    } 
    public function actionIndex() 
    { 
     $searchModel = new CaseSearch(); 
     $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

     return $this->render('index', [ 
      'searchModel' => $searchModel, 
      'dataProvider' => $dataProvider, 
     ]); 
    } 
    public function actionView($id) 
    { 
     return $this->render('view', [ 
      'model' => $this->findModel($id), 
     ]); 
    } 
    public function actionCreate($sub_id) 
    { 
     $model = new Case(); 

     if ($model->load(Yii::$app->request->post()) && $model->save()) { 
      return $this->redirect(['view', 'id' => $model->id]); 
     } else { 
      return $this->render('create', [ 
       'model' => $model, 
       'parent' => $sub_id 
      ]); 
     } 
    } 
    public function actionUpdate($id) 
    { 
     $model = $this->findModel($id); 

     if ($model->load(Yii::$app->request->post()) && $model->save()) { 
      return $this->redirect(['view', 'id' => $model->id]); 
     } else { 
      return $this->render('update', [ 
       'model' => $model, 
      ]); 
     } 
    } 
    public function actionDelete($id) 
    { 
     $this->findModel($id)->delete(); 

     return $this->redirect(['index']); 
    } 
    protected function findModel($id) 
    { 
     if (($model = Case::findOne($id)) !== null) { 
      return $model; 
     } else { 
      throw new NotFoundHttpException('The requested page does not exist.'); 
     } 
    } 
} 

子/ view.php文件:

<?php 
use yii\helpers\Html; 
use yii\widgets\DetailView; 

$this->title = $model->id . ": " . $model->fullname; 
$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Subs'), 'url' => ['index']]; 
$this->params['breadcrumbs'][] = $this->title; 
?> 
<div class="sub-view"> 

<h3><?= Html::encode($this->title) ?></h3> 

<?= DetailView::widget([ 
    'model' => $model, 
    'attributes' => [ 
     'id', 
     'address_id', 
     'address.region.name', 
     [ 
      'label' => 'address', 
      'value' => 'Street: ' . $model->address->street . ' House ' . $model->address->house . ' Flat ' . $model->address->flat 
     ], 
    ], 
]) ?> 

<p> 
    <?= Html::a(Yii::t('app', 'Create Case'), ['/case/create', 'sub_id'=>$model->id], ['class' => 'btn btn-success']) ?> 
</p> 

</div> 

殼體/ _form.php這個文件:

<?php 
use yii\helpers\Html; 
use yii\widgets\ActiveForm; 

<div class="case-form"> 

<?php $form = ActiveForm::begin(); ?> 

<?= $form->field($model, 'id')->textInput() ?> 

<?php if($model->isNewRecord && isset($parent_id)) { 
    $model->sub_id = $parent_id; 
} ?> 

<?= $form->field($model, 'sub_id')->textInput(['readonly' => true, 'value' => $model->sub_id]) ?> 

<?= $form->field($model, 'case_date')->textInput() ?> 

<div class="form-group"> 
    <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> 
</div> 

<?php ActiveForm::end(); ?> 

</div> 
+1

如果您需要幫助,您將不得不提供更多信息。 – CGritton

+0

請查看[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – MikeJRamsey56

回答

1

隨着缺乏任何進一步的信息,就我的理解這是你正在問 -

以圖片中的示例爲例,如果用戶單擊創建案例按鈕,則會打開一個新窗體(創建案例)。在Create Case表單中,除了其他輸入字段之外,還有一個sub_id字段,默認情況下它的值爲4(因爲在圖片中用戶Harry Potter的ID是4)。

基於以上你只需要做到以下幾點 - 在你的動作(CaseController內)的創建情況,你通過sub_id像下面 -

/* ** CaseController ** */ 
public function actionCreate($sub_id) 
{ 
    //....other code 

    return $this->render('create', ['model' => $model,'parent_id' => $sub_id]); 
} 

然後裏面的_form.php在那裏你展現在你們面前簡單地做這樣的案例創建形式 -

/* ** _form.php ** */ 
//... other code 

//if you are using _form.php for Edit Form as well, 
//this prevents the value from the DB being over-written 
if($model->isNewRecord && isset($parent_id)) { 
    $model->sub_id = $parent_id; 
} 
<?= $form->field($model, 'sub_id')->textInput() ?> 

//... other code 

這應該足以顯示從父窗體傳遞的值。

+0

@ sm979感謝您的回覆。其實你已經很好地理解了我的問題,但是你的解決方案對我來說並不合適。它將我引用​​到Create Case表單中,該表單對於sub_id具有**空的輸入字段**。 – Miracle633

+0

@ Miracle633您需要從相應的視圖,控制器和模型文件中共享相關的代碼......而且很難知道問題所在。 – sm1979

+0

@ sm979我更新了問題。添加視圖和控制器文件 – Miracle633