slo_nik
@slo_nik

Как передать id записи в виджет?

Добрый вечер.
Подскажите, пожалуйста, как правильно сделать.
Есть форма подачи объявления. Выводится в модальном окне. Кнопка вызова модального окна с формой для нового объявления расположена в layouts/main.php. Кнопка для вызова окна с формой для редактирования находится в другом модальном окне.
Необходимо сделать возможность выводить форму не только для подачи нового объявления, но и редактирования.
Вообще-то это переделка существующего кода. Но старый код, я думаю, не очень, мягко говоря.
Сейчас, чтобы получить модель для редактирования, отсылается ajax запрос к контролеру, в ответе приходят данные, которые при помощи jquery парсятся и подставляются в форму. Но форма очень объёмная, очень много лишнего кода получается.
Задумал перенести всё это в виджет, чтобы прямо в виджете выводить или пустой экземпляр модели или заполненный, для редактирования, тем самым сократив объём кода и убрать лишние запросы к контролерам.
С первой частью я справился без проблем)))
Создал виджет подключил вид с формой.
class SaleForm extends Widget
{
    public $model;
    public $files;
    public function init()
    {
        $this->model = new Cars;
        $this->files = new Images;
    }

    public function run()
    {
        return $this->render('index', ['model' => $this->model, 'files' => $this->files]);
    }
}

Но вот как теперь сделать передачу id объявления в виджет не знаю.
Хотелось бы получить что-то похожее.
public function init()
    {
        if($this->id == null){
            $this->model = new Cars;
            $this->files = new Images;           
        }
        else{
            // тут получать экземпляр необходимой модели 
        }
    }

Я знаю, что передать параметр в виджет большой проблемы не представляет
<?= SaleForm::widget(['id' => $id])
Проблем не представляет получить сам id при клике на кнопке "редактировать".
Но вот как теперь этот параметр передать в виджет не понимаю, не знаю.
Подскажите, как правильно сделать?

p.s.
Можно всё тем же ajax отправлять id в действие контролера и возвращать вид формы с переданной в него заполненной моделью.
Но всё таки интересно, можно ли обойтись без этого?
  • Вопрос задан
  • 285 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
или иметь на каждую кнопку свою модалку, как это реализовано в https://www.yiiframework.com/extension/yiisoft/yii...
или получать форму ajax
или иметь шаблон формы (например, https://learn.javascript.ru/template-tag) и средствами js подставлять id в шаблон. Точнее строить html на базе шаблона и полученного id. при этом id это может быть data атрибут кнопки.

Офтоп, вот это
public $model;
public $files;
public function init()
    {
        $this->model = new Cars;
        $this->files = new Images;
    }

лишено смысла. Надо или перед переопределением проверяйте на пустоту или сделать свойства не публичными.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы