Событийные методы простых моделей
Здравствуйте, возникла проблема, событийные методы по типу beforeUpdate для обычных моделей как я понял не применяются для простых моделей. Изучив код предустановленных простых моделей SEO понял что нужно использовать функцию Update(), в функции указал нужные действия при обновления поля, всё работает. Но вот если обновлять другие поля простой модели то они уже обновляться не будут. Временно решил использовать костыль setValue, но при обновлении данных из другой точки кода, все данные обнуляются. Как правильно нужно использовать функцию Update для корректной работы ?
public function update() { if ($this -> elements["raspisanie"] -> getValue()) { rename($this -> elements["raspisanie"] -> getValue(), $_SERVER["DOCUMENT_ROOT"].'/userfiles/files/rasp/raspisanie.pdf'); $this -> setValue("raspisanie", 'userfiles/files/rasp/raspisanie.pdf'); } $this -> setValue("allow_form_courses", $this -> elements["allow_form_courses"] -> getValue()); $this -> setValue("allow_vk_mini_apps", $this -> elements["allow_vk_mini_apps"] -> getValue()); parent :: update(); }
Добрый день, да, beforeUpdate для простых моделей не применяется, а обновление данных вручную производится как на примере тут https://mv-framework.ru/upravlenie-prostymi-modeliami/
Но у вас в коде не совсем понятно с какой целью делаются эти действия. Вы хотите изменить данные сразу после обновления данных в админке?
//если обновляете данные во frontend $mv -> model-> setValue("key", "value") -> update(); //Если перегружаете метод update в классе модели, то попробуйте так public function update() { ... $arguments = func_get_args(); $backend = (isset($arguments[0]) && $arguments[0] == "backend") ? "backend" : false; parent :: update($backend); }
Подскажите каким образом в функции Update можно обновить значения, $this -> setValue() не обновляет значения. В чём смысл, в простой модели есть поле типа файл, если файл загружают в админке, его нужно переименовать и переместить в определённую папку, и изменить этот путь в значении поля.
public function update() { if ($this -> elements["raspisanie"] -> getValue()) { rename($this -> elements["raspisanie"] -> getValue(), $_SERVER["DOCUMENT_ROOT"].'/userfiles/files/rasp/raspisanie.pdf'); $this -> setValue("raspisanie", 'userfiles/files/rasp/raspisanie.pdf'); } $arguments = func_get_args(); $backend = (isset($arguments[0]) && $arguments[0] == "backend") ? "backend" : false; parent :: update($backend); }
Дело в том что при обновлении MV складывает файлы в папки по названиям модели, т.е. он будет у вас класть файл в папку /userfiles/models/model-files/
И потом будет его пытаться оттуда взять и показать в админке, сейчас вы ему предлагаете другой путь и он пропускает сохранение файла в админку.
Если вы хотите, чтобы файл лежал именно по такому пути userfiles/files/rasp/raspisanie.pdf лучше переместите (скопируйте) его уже на фронтенде, не меняя исходного файла и потом показывайте новый файл на сайте
if($mv -> model -> raspisanie) { copy( ... ) }