Как я могу проверить поля случайных имен в Yii? - PullRequest
0 голосов
/ 23 февраля 2020

У меня много полей, сгенерированных из циклов. Я хотел бы проверить их с помощью правил проверки (целое число). Я не знаю, как бросить так много полей со случайными именами в модель в функцию rules (). Как проверить поля без модели?

Просмотр: <?= Html::input('number', 'file[' . $indexRow . ']' . '[' . $indexCell . ']', $cell, $options = ['class' => 'form-control', 'filter' => 'intval', 'integer']) ?>

Контроллер:

`publi c функция actionEdit ($ fileName) {

    $siteHelper = new SiteHelper();
    $editForm = new EditForm();

    $preparedRows = $siteHelper->prepareRows($fileName);
    $preparedHTML = '';

    if (Yii::$app->request->isPost) {

        $post = Yii::$app->request->post();

        if (isset($post['file'])) {

            $dataFile = $post['file'];
            $preparedRows = $siteHelper->updateExcelFile($fileName, $dataFile);

            Yii::$app->session->setFlash('success', 'Plik został zaktualizowany!');

        } else if (isset($post['EditForm'])) {
            $events = $post['EditForm']['events'];
            $preparedHTML = $siteHelper->prepareHTML($events, $preparedRows, $fileName);

            Yii::$app->session->setFlash('success', 'Wygenerowano plik PDF!');
        }
    }

    $viewParameters = [
        'rows' => $preparedRows,
        'editForm' => $editForm,
        'scoreHTML' => $preparedHTML,
        'downloadLink' => Url::toRoute(['site/download', 'fileName' => $fileName])
    ];

    return $this->render('edit', $viewParameters);
}`

Модель: `класс EditForm расширяет модель {publi c $ events;

public function rules()
{


    return [
        [['events'], 'required'],
        ['events', 'integer'],
    ];
}

}`

1 Ответ

0 голосов
/ 24 февраля 2020

Если у вас есть массив, вы можете использовать каждый валидатор: https://www.yiiframework.com/doc/api/2.0/yii-validators-eachvalidator

Функция проверки должна быть:

public function rules()
{
    return [
         [['events'], 'each', 'rule' => ['required']],
         [['events'], 'each', 'rule' => ['integer']],
    ];
}

Вам может понадобиться избегать многопустотного массива в html и визуализировать поле следующим образом:

<?= Html::input('number', 'file[' . $indexRow . '-' . $indexCell . ']', $cell, $options = ['class' => 'form-control', 'filter' => 'intval', 'integer']) ?>

позже вы можете «взорвать» индекс ячейки строки (разве это не должно быть col? ) для идентификации строки и столбца.

$rowCellIndecies = explode('-', $rowCellIndex);

функция разнесения: https://www.php.net/manual/en/function.explode.php

...