2016-11-22 5 views
0

私は個人的なYii2プロジェクトに取り組んでいます。 Yii2のmulti_modelsサインアップページを作成し、その情報をセッションに保存します。

  • は、二つの関連モデル(組織&従業員)を作成するためのフォームを持っているアップ歌うページを作成し、セッション中に第三1(EMPLOYEE_ROLE)
  • ストアこれらの情報を使用します。私は方法がわかりません後でそのセッションを使用してください。

一般シナリオ:充填することにより

管理者の購読申し込み: 組織名 とユーザ名&パスワード&メール(管理者、従業員用)

値が有効であるならば、システムが作成されますauto_generated organization_idを持つ "Organization"その後

は、システムが

はその後、システムはセッション中に、以下の情報を保持します(ORGANIZATION_ID必要とAdmin「EMPLOYEE_ROLE」に、このユーザーを割り当てます)「従業員」を作成します(ORGANIZATION_ID、EMPLOYEE_ID、ROLE_ID、タイムスタンプ)ユーザをadminのホームページに誘導します。

注:私はモデルを共通フォルダとフロントエンドのコントローラに保存していますので、ビューもそうする必要があります。

私はこれはあなたの問題を解決するために何ができるかの一般的な概要である

答えて

0

、あなたの助けに感謝。 OrganizationとEmployeeの両方のフォームに実際のフィールドを追加する必要があります。

コントローラのアクション:

public function actionSignup() { 
    $post = Yii::$app->request->post(); 

    $organization = new Organization(); 
    $employee = new Employee(); 

    // we try to load both models with the info we get from post 
    if($organization->load($organization) && $employee->load($organization)) { 
     // we begin a db transaction 
     $transaction = $organization->db->beginTransaction(); 

     try { 
      // Try to save the organization 
      if(!$organization->save()) { 
       throw new \Exception('Saving Organization Error'); 
      } 

      // Assign the organization id and other values to the employee 
      $employee->organization_id = $organization->id; 
      ... 

      // Try to save the employee 
      if(!$employee->save()) { 
       throw new \Exception('Saving Employee Error'); 
      } 

      // We use setFlash to set values in the session. 
      // Important to add a 3rd param as false if you want to access these values without deleting them. 
      // But then you need to manually delete them using removeFlash('organization_id') 
      // You can use getFlash('organization_id'); somewhere else to get the value saved in the session. 
      Yii::$app->session->setFlash('organization_id', $organization->id) 
      Yii::$app->session->setFlash('employee_id', $employee->id) 
      ... 

      // we finally commit the db transaction 
      $transaction->commit(); 
      return $this->redirect(['somewhere_else']); 
     } 
     catch(\Exception e) { 
      // If we get any exception we do a rollback on the db transaction 
      $transaction->rollback(); 
     } 
    } 

    return $this->render('the_view', [ 
     'organization' => $organization, 
     'employee' => $employee, 
    ]); 
} 

ビューファイル:

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

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

    <?= $form->field($organization, 'some_organization_field') ?> 

    <!-- More Fields --> 

    <?= $form->field($employee, 'some_employee_field') ?> 

    <!-- More Fields --> 

    <?= Html::submitButton('Save', ['class' => 'btn btn-primary']) ?> 

<?php ActiveForm::end() ?> 
+0

たくさん助け、ありがとうございました –

関連する問題