Маршрут / перенаправление к индексу того же контроллера с кодом зажигания данных 4 - PullRequest
0 голосов
/ 16 апреля 2020

Я хочу перенаправить маршрут к индексу того же контроллера. Мой сценарий после хранения данных в базе данных, я хочу показать сообщение. Теперь я попытался использовать FlashData как:

$this->session->setFlashdata('errmsg', json_encode(array('errstatus' => 'true' , 'msg' => $errorstring)));

Так что я попытался получить доступ к данным в виде, как:

<?php print_r($this->session->getFlashdata("errmsg"))?>

Но это не удалось, потому что переменная сеанса не существует. То, как я перенаправляю на тот же контроллер, выглядит следующим образом:

return redirect()->to('/register');

Теперь я застрял в отправке данных на это перенаправление. Я могу сделать return view('pages/register', $this->session->get());, но это только обходной путь, потому что, если я сделаю это, у URL все еще будет хранилище методов, и он будет показывать сообщение об ошибке при каждой загрузке.

1 Ответ

0 голосов
/ 17 апреля 2020

Я настроил небольшой тест, чтобы поиграть с этим ...

Я создал Controller (Home) для установки значения flashData со ссылкой на другой контроллер (Page), который устанавливает второе значение flashData и пытается отобразить их оба.

Домашний контроллер (app \ Controllers \ Home. php)

class Home extends BaseController
{
    protected $session;

    public function __construct() {
        $this->session = \Config\Services::session();
    }

    public function index()
    {
        $this->session->setFlashdata('errmsg_1','Error Message 1');
        echo '<a href="page">Click here to View the Flash Data</a><br>';
    }
}

Контроллер страницы (app \ Controllers \ Page. php)

class Page extends BaseController {
    protected $session;

    public function __construct() {
        $this->session = \Config\Services::session();
    }

    public function index() {
        echo __LINE__ . ' ' . __CLASS__ . ' ' . __METHOD__;
        $this->session->setFlashdata('errmsg_2','Error Message 2');
        return redirect()->to('/page/register');
    }

    public function register() {
        echo __LINE__ . ' ' . __CLASS__ . ' ' . __METHOD__;
        $page['error_message_1'] = $this->session->getFlashdata('errmsg_1');
        $page['error_message_2'] = $this->session->getFlashdata('errmsg_2');
        echo view('page_view', $page);
    }
}

И представление (app \ Views \ page_view. php)

<?php
/**
 * @var string $error_message_1
 * @var string $error_message_2
 */
echo '<br>';
echo 'Error 1 :';
echo ($error_message_1) ? $error_message_1 : 'I am Null'; // Expect this to be NULL?
echo '<br>';
echo 'Error 2 :';
echo ($error_message_2) ? $error_message_2 : 'I am Null'; // This should appear
echo '<br><a href="/home">Go Back Home</a><br>';

Таким образом, домашний контроллер загружает FlashData для «errmsg_1» со ссылкой для перехода к контроллеру страницы.

Оказавшись на контроллере страницы, индекс устанавливает дополнительный errmsg_2 и выполняет перенаправление на метод регистрации.

Таким образом, после нажатия на ссылку из Home Controller мы приходим к контроллеру страницы, который отображает ...

17 App\Controllers\Page App\Controllers\Page::register
Error 1 :I am Null
Error 2 :Error Message 2
Go Back Home

И после выполнения Refre sh на странице Контроллер у нас получается ...

17 App\Controllers\Page App\Controllers\Page::register
Error 1 :I am Null
Error 2 :I am Null
Go Back Home

Так что перенаправление работает с использованием flashData.

Единственным недостатком является то, что вы должны передать значение flashdata как переменную в представление для отображения.

...