Добрый вечер.
Подскажите, пожалуйста, как правильно сделать.
Есть форма подачи объявления. Выводится в модальном окне. Кнопка вызова модального окна с формой для нового объявления расположена в 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 в действие контролера и возвращать вид формы с переданной в него заполненной моделью.
Но всё таки интересно, можно ли обойтись без этого?