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 в действие контролера и возвращать вид формы с переданной в него заполненной моделью.
Но всё таки интересно, можно ли обойтись без этого?
  • Вопрос задан
  • 280 просмотров
Решения вопроса 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;
    }

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

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

Войти через центр авторизации
Похожие вопросы