OctoberCMS builder - массовое создание моделей - PullRequest
0 голосов
/ 08 мая 2019

Итак, у меня есть модель Лицензии, созданная через конструктор octoberCMS с представлениями «Список» и «Форма».

Модель лицензии содержит одно отношение к модели школы.

В представлении формы есть раскрывающийся список со школами и полем ввода (тип = число), который определяет, сколько лицензий создать длявыбранная школа.

enter image description here

Поведение по умолчанию создает только 1 лицензию

Как вместо этого создать введенное количество лицензий

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Ну, на самом деле, я уже решил это, написав собственную create_onSave функцию для Лицензии контроллер:

public function create_onSave(){

    $quantity = post('License[_quantity]');
    $school_id = post('License[school]');

    for($i = 1; $i <= $quantity; $i++){
        # Create License
        $license = new \Acme\Plugin\Models\License();
        $license->school_id = $school_id;
        $license->save();
    }

    \Flash::success('Added '.$quantity.' Licenses');

}
0 голосов
/ 10 мая 2019

Вам необходимо переопределить поведение по умолчанию.

Примечание: Для выполнения этой задачи требуется знание программирования OctoberCMS.

В вашем контроллере вам необходимоДобавьте этот метод.

use Flash;
use Backend;

// ...

public function create_onSave($context = null)
{

    // 1. init form for your modal and get input data from it
    $model = $this->asExtension('FormController')->formCreateModelObject();
    $model = $this->asExtension('FormController')->formExtendModel($model) ?: $model;
    $this->asExtension('FormController')->initForm($model);
    $form = $this->asExtension('FormController')->formGetWidget();
    $data = $form->getSaveData();

    // 2. get proper count field here and convert to int for loop 
    $count = intval($data['license_to_create']);

    // 3. validation step
    // if($validationFailed) {
    //    Flash::error('Something Went Wrong.');
    //    return;
    // }

    // 4. loop
    foreach ($i = 1; $i <= $count; $i++) {
        $licenseModel = new LicenseModel;
        // you can add other data
        // you can access $data['school_id'] here
        // $licenseModel->school_id = $data['school_id'];
        $licenseModel->save();
    }

    // 5. success message
    Flash::success($count . ' License Added');

    // 6. just redirect it to desired location 
    return Backend::redirect('/hardiksatasiya/sotest/skills');
}

Объяснение

  1. здесь мы инициализируем обязательные переменные, чтобы мы могли получить данные, которые были заполнены в текстовом поле, этоэто код по умолчанию, поэтому я просто скопировал его из основного кода.

  2. как только у нас есть переменная $ data, мы можем получить доступ к заполненным данным, которые мы используем $data['license_to_create'], в вашем случае это 100, а $data['school_id'] для какой школы вам нужно создать лицензию, Примечание: у вас могут быть разные поля, пожалуйста, измените их соответствующим образом.

  3. шаг проверки * необязательно, вы можете добавить некоторые проверки здесьи остановите поток, если что-то не так с сообщением об ошибке.

  4. цикл для создания новых записей для модальной лицензии, [код по умолчанию создаст только 1 запись], но здесь мы создаем его на основезаданный счет $data['license_to_create']

  5. jПросто нормальное сообщение об успехе.

  6. перенаправить туда, где нам нужно перенаправить обычно, вам нужно перенаправить его на /author-name/plugin-name/license-controller Примечание: у вас может быть другой URL, пожалуйста, измените соответственно.

пожалуйста, добавьте комментарий, если у вас есть какие-либо сомнения.

...