За последние 24 часа нас посетили 10240 программистов и 788 роботов. Сейчас ищут 305 программистов ...

Передача данных в самописной MVC

Тема в разделе "PHP для новичков", создана пользователем as68, 21 июл 2021.

  1. as68

    as68 Новичок

    С нами с:
    21 июл 2021
    Сообщения:
    4
    Симпатии:
    0
    Всех приветствую!
    Понадобилось подкорректировать самописную MVC на PHP (автор не доступен).
    Но не могу разобраться с данными.

    Изначально данные во вью передаются из контроллера как массив pData в индексной функции контроллера.
    Во вьюхе есть форма добавления новой строки, action которой ссылается на функцию addrow() в этом же контроллере.
    И в ней после операций с базой идет перенаправление на эту же страницу для обновления таблицы.

    Код (Text):
    1. class OtchetController extends Controller {
    2. ...
    3. public function index() {
    4.         //получение данных из базы и передача во вью для вывода их в виде таблицы
    5.         $table_t = $this->model->getTable();
    6.         $this->pData['table_t'] = $table_t;
    7.      
    8.         $this->view->render($this->pageTpl, $this->pData);
    9. }
    10.  
    11. public function addrow($arg) {
    12.     //добавление новой строки в таблицу
    13.  
    14.     header("Location: /otchet");
    15. }      
    16. ...
    17. }
    Подскажите, пожалуйста, как передавать данные (например, вывод сообщения об ошибке или удаче операции) из функции addrow() во вьюху или в функцию index() контроллера.
    Из model я получаю результаты о выполнении, но использовать могу только через глобальные переменные. Думаю это не правильно.
    Идеально было бы сохранять в том же массиве pData.
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.129
    Симпатии:
    1.638
    Сессии.
     
    as68 нравится это.
  3. as68

    as68 Новичок

    С нами с:
    21 июл 2021
    Сообщения:
    4
    Симпатии:
    0
    Да, к этому в итоге и пришел, но думал есть более хорошее решение.
    В итоге слишком много чего болтается в сессии, нужно не забывать обнулять для других страниц и не очень правильно, кмк, писать код кроме вывода (обнуление) во вьюхе..
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.129
    Симпатии:
    1.638
    Создайте класс для сессии с методом типа
    PHP:
    1. public function getFlash(string $key) {
    2.     $value = $_SESSION[$key};
    3.     unset($_SESSION[$key]);
    4.     return $value;
    5. }
     
    as68 нравится это.
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.194
    Симпатии:
    530
    Если в текстах сообщений ты не называешь конкретные объекты, при работе с которыми возникают ошибки, то «ручку» для выбора сообщения можно передавать в куках или в адресе, например:
    /form без сообщений;
    /form/1 с сообщением 1;
    и т.д.
    --- Добавлено ---
    Номер сообщения передается в экшин через параметр.
    --- Добавлено ---
    Или, если роутер не обрабатывает строку GET-параметров, но при этом пропускает, можно брать номер напрямую из $_GET.
     
    as68 нравится это.
  6. as68

    as68 Новичок

    С нами с:
    21 июл 2021
    Сообщения:
    4
    Симпатии:
    0
    Обрабатывает
     
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.194
    Симпатии:
    530
    Тогда см., как тебе удобнее передавать номер, в пути или в GET-параметре. Например, для пути, может, проще закрыть в роботс доп. адреса (Disallow: /form/), а для GET-параметра, может, проще сделать один роут для двух видов адресов.
     
    as68 нравится это.
  8. as68

    as68 Новичок

    С нами с:
    21 июл 2021
    Сообщения:
    4
    Симпатии:
    0
    спасибо за вариант, подумаю