Zend_framework - помещать данные в $ _POST при использовании помощника _redirector в контроллере - PullRequest
0 голосов
/ 19 декабря 2009

I перенаправление (в некоторых случаях) с контроллера на контроллер ошибок, действие «не зарегистрировано» с использованием помощника по перенаправлению. Моя проблема заключается в следующем: я хочу передать аргумент в массиве $ _POST (URL-адрес, с которого произошло перенаправление), чтобы пользователь мог вернуться на эту страницу после входа в систему.

Как разместить данные в массиве $ _POST при использовании помощника по перенаправлению?

Спасибо, что впереди.

Ответы [ 4 ]

4 голосов
/ 19 декабря 2009

Когда вы используете перенаправитель с внутренним перенаправлением (т. Е. goToRoute), параметры передаются вместе с ним. Таким образом, если вы добавите свой Refferrer к запросу до фактического перенаправления:

// Assuming $request is a Zend_Controller_Request
$request->setParam('ref', $referrer);
// then use the redirector

тогда эта переменная будет передана вместе с запросом при перенаправлении. Итак, вам нужно будет проверить / захватить эту переменную из запроса в действии, на которое вы перенаправили, и затем установить его как скрытое поле в форме. Затем, когда ваша форма отправляет сообщение для входа в систему, вы можете снова проверить переменную ref и при успешном входе в систему перенаправить ее в это место.

Теперь на вашем месте я бы не использовал реферал в качестве URL-адреса, а был бы сериализованным или закодированным в json массивом параметров предыдущего запроса. таким образом, вы можете использовать goToRoute и во втором экземпляре.

Конечно, если перенаправление пришло из какого-то пост-действия, содержащего конфиденциальные данные, вы не захотите это делать. В этом случае вы захотите использовать сеанс, как было предложено ранее.

Прежде всего, лучший совет, который я могу дать, это взглянуть на код Zend_Controller_Router_Rewrite и Zend_Controller_Action_Helper_Redirector.

1 голос
/ 19 декабря 2009

Передача управления на страницу входа просто чувствует больше похоже на _forward, чем _redirect, как будто все это принадлежит одному действию. Тем более, что ты вернешься обратно.

_forward($action, $controller = null, $module = null, array $params = null)

Затем вы можете передать свое исходное местоположение в $params, как хотите.

1 голос
/ 19 декабря 2009

Невозможно без каких-либо сокетов или керлинга покер.

Почему бы не попробовать использовать массив $ _SESSION таким же образом?

Действительно ли имеет значение, может ли пользователь видеть URL перенаправления в адресной строке? я сомневаюсь, что они будут заботиться, и я вижу это несколько раз на некоторых главных сайтах.

0 голосов
/ 19 декабря 2009

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

Я не уверен, как вы будете делать то, что вы хотите, используя Zend Framework, но я бы предложил два способа сделать это в целом. Вы можете либо отправить переменную GET, либо использовать переменную сеанса для хранения обратного URL-адреса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...