2016-03-21 5 views
0

Ich habe drei Modelle: User, Job und UserJob. Die Modelle Benutzer und Job haben eine n: m-Beziehung. Im Benutzerformular muss ich dynamisch neue Jobs hinzufügen.Yii2: Dynamische DateControl-Felder aus einem verwandten Modell zu einem Formular hinzufügen

Im Modell Benutzer ich die für den aktuellen Benutzer verbundenen Arbeitsplätze:

public function getUserJobs() { 
    return UserJob::find() 
     ->where(['user_id' => $this->id]) 
     ->orderBy('start DESC') 
     ->all(); 
} 

Im Blick/user/_form.php sind die bestehenden Arbeitsplätze Form wie folgt hinzugefügt:

if (isset($userJobs)) { 
    $i = 0; 
    foreach ($userJobs as $job) { 
     $i++; 
     ... 
     echo $form->field($job, '['.$i.']start')->widget(DateControl::className(), [ 
      'type' => kartik\datecontrol\DateControl::FORMAT_DATE, 
      'saveOptions' => [ 
       'name' => 'job_start[]', 
      ], 
     ])->label(false); 
     ... 

Ich füge neue Jobs mit jQuery (ähnlich wie in diesen examples). Für die meisten Felder funktioniert es perfekt. Aber es gibt ein Problem mit dem Feld Start, die die DateControl Erweiterung verwendet. Die Erweiterung erzeugt ein eigenes jQuery-Skript. Ohne dieses Skript zu bearbeiten, kann das Startfeld nicht korrekt funktionieren.

Gibt es eine Möglichkeit, dynamisch neue DateControl Felder zu dem Formular hinzuzufügen?

Antwort

0

Eine mögliche Lösung ein paar versteckte Zeilen mit Job-Felder hinzuzufügen ist:

for ($j=$i; $j < $i+3; $j++) { 
    $job = new MitarbeiterJob(); 
    echo '<tr style="display:none;" class="new_job">'; 
    ... 
    echo $form->field($job, '['.$j.']start')->widget(DateControl::className(), [ 
      'type' => DateControl::FORMAT_DATE, 
      'saveOptions' => [ 
       'name' => 'job_start[]', 
      ], 
     ])->label(false); 
    } 
    ... 

Wenn ein Benutzer auf die Schaltfläche klickt ‚einen neuen Job hinzufügen‘, dann zeigt ein jQuery-Skript eine der Zeilen.

Es funktioniert, aber die Lösung ist nicht optimal ...

Verwandte Themen