Всех приветствую! Понадобилось подкорректировать самописную MVC на PHP (автор не доступен). Но не могу разобраться с данными. Изначально данные во вью передаются из контроллера как массив pData в индексной функции контроллера. Во вьюхе есть форма добавления новой строки, action которой ссылается на функцию addrow() в этом же контроллере. И в ней после операций с базой идет перенаправление на эту же страницу для обновления таблицы. Код (Text): class OtchetController extends Controller { ... public function index() { //получение данных из базы и передача во вью для вывода их в виде таблицы $table_t = $this->model->getTable(); $this->pData['table_t'] = $table_t; $this->view->render($this->pageTpl, $this->pData); } public function addrow($arg) { //добавление новой строки в таблицу header("Location: /otchet"); } ... } Подскажите, пожалуйста, как передавать данные (например, вывод сообщения об ошибке или удаче операции) из функции addrow() во вьюху или в функцию index() контроллера. Из model я получаю результаты о выполнении, но использовать могу только через глобальные переменные. Думаю это не правильно. Идеально было бы сохранять в том же массиве pData.
Да, к этому в итоге и пришел, но думал есть более хорошее решение. В итоге слишком много чего болтается в сессии, нужно не забывать обнулять для других страниц и не очень правильно, кмк, писать код кроме вывода (обнуление) во вьюхе..
Создайте класс для сессии с методом типа PHP: public function getFlash(string $key) { $value = $_SESSION[$key}; unset($_SESSION[$key]); return $value; }
Если в текстах сообщений ты не называешь конкретные объекты, при работе с которыми возникают ошибки, то «ручку» для выбора сообщения можно передавать в куках или в адресе, например: /form без сообщений; /form/1 с сообщением 1; и т.д. --- Добавлено --- Номер сообщения передается в экшин через параметр. --- Добавлено --- Или, если роутер не обрабатывает строку GET-параметров, но при этом пропускает, можно брать номер напрямую из $_GET.
Тогда см., как тебе удобнее передавать номер, в пути или в GET-параметре. Например, для пути, может, проще закрыть в роботс доп. адреса (Disallow: /form/), а для GET-параметра, может, проще сделать один роут для двух видов адресов.