2016-01-13 3 views
1

У меня есть 2 модели A и B, где A имеет множество B. Теперь я хочу создать несколько B одновременно (страница). Вот мои коды.Yii2 правило массива валидация

B.php

... 
public function rules() 
    { 
     return [ 
      [['username', 'xx', 'yy'], 'required'], 
      [['xx', 'yy'], 'string'], 
      [['username'], 'string', 'max' => 255] 
     ]; 
    } 
... 

_form.php

<div class="b-form"> 

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

<?php for ($i=0; $i < 3; $i++) { 
?> 
<h3>B #<?=$i+1?></h3> 
<hr /> 
    <?= $form->field($model, 'xx[]')->textInput(['maxlength' => true]) ?> 

    <?= $form->field($model, 'yy[]')->textInput(['maxlength' => true]) ?> 
<?php 
    } 
?> 
    <div class="form-group"> 
     <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> 
    </div> 

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

</div> 

Я хочу, чтобы эти 6 (3x2) текстовые входы реагирует индивидуально, так и по меньшей мере необходимости 2 пары xx и yy, чтобы пройти проверку ,

Теперь, как я строю хорошие правила для покрытия моих потребностей?

ответ

0

В официальных документах имеется специальный раздел - Collecting Tabular Input.

Пример контроллера:

<?php 

namespace app\controllers; 

use Yii; 
use yii\base\Model; 
use yii\web\Controller; 
use app\models\Setting; 

class SettingsController extends Controller 
{ 
    // ... 

    public function actionUpdate() 
    { 
     $settings = Setting::find()->indexBy('id')->all(); 

     if (Model::loadMultiple($settings, Yii::$app->request->post()) && Model::validateMultiple($settings)) { 
      foreach ($settings as $setting) { 
       $setting->save(false); 
      } 
      return $this->redirect('index'); 
     } 

     return $this->render('update', ['settings' => $settings]); 
    } 
} 

Используемые методы:

Существует больше информации, например, как создать динамический набор новых записей, использовать его, если вам это нужно.

Также обратите внимание на некоторые расширения для облегчения работы с несколькими входами, например unclead/yii2-multiple-input или wbraganca/yii2-dynamicform.

Я хочу, чтобы эти 6 (3х2) текстовые входы реагирует индивидуально, так и в наименьшей потребности 2 пары хх и уу, чтобы пройти проверку.

Это звучит странно, вы никогда не должны доверять и всегда проверять ВСЕ данные, поступающие от пользователя.

+1

Прежде всего, благодарю вас за советы: Это звучит странно, вы никогда не должны доверять и всегда проверять ВСЕ данные, поступающие от пользователя –

+0

, и как насчет _form.php, делает ли я уже правильный? –