OctoberCMS builder - массовое создание моделей

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

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

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

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

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

2 ответа

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

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');

}

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

Примечание. Для выполнения этой задачи требуются знания программирования на 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. просто нормальное сообщение об успехе.

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

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

Другие вопросы по тегам