2015-07-03 2 views
0

Моя форма входа в систему может вызываться с запросом на повторный вызов, и мне интересно, есть ли простой способ включить это в последующее post-действие.Zend Framework 2 - Включая переменную в виде action

Вариант использования для входа в систему единого входа.

Мой обычный маршрут Войти является:

/customer/login 

и при вызове от клиента третьей стороны становится:

/customer/login?redirectTo=http://www.example.com 

Мой Войти Действие:

public function loginAction() 
{ 
    $prg = $this->prg(); 

    if ($prg instanceof Response) { 
     return $prg; 
    } elseif ($prg === false) { 
     return new ViewModel(['form' => $this->loginForm]); 
    } 

Это нагружает мой взгляд, и я в настоящее время определяют мое действие, как так:

$form = $this->form; 
$form->setAttribute('action', $this->url()); 

Теперь, когда действие называется, я теряю параметр RedirectTo.

Итак, мой вопрос в том, можно ли обновить действие, чтобы включить перенаправляемый URL-адрес, чтобы при щелчке пользователем входа в систему он был отправлен обратно в мою форму?

спасибо!

EDIT - Очевидно, что я могу создать маршрут redirectTo в конфигурациях и протестировать при первом вызове страницы на наличие такого маршрута и включить его в форму. Мой вопрос, однако, заключается в том, можно ли это сделать автоматом просто из viewcript.

+0

Код, который я показал, создает URL-адрес в файле вида.Почему вы прикасаетесь к конфигурациям маршрутов? – Stanimir

ответ

1

Чтобы создать аргументы строки запроса из помощника вида, вам необходимо назначить их в качестве третьего аргумента, используя ключ запроса. Пожалуйста, обратитесь к документации ZF2 http://framework.zend.com/manual/current/en/modules/zend.view.helpers.url.html

$form->setAttribute('action', $this->url('application', array('action' => 'login'), array('query' => array('redirectTo' => 'http://www.example.com,)))); 
+0

Это будет работать, если я захвачу URL перенаправления с контроллера и отправлю на просмотр. Мне, однако, интересно, можно ли пропустить этот шаг ... – HappyCoder

+0

Нет, что я знаю. Вы должны сделать это с контроллера. Вот почему есть помощники просмотра. – Stanimir

+0

true - спасибо за помощь. – HappyCoder

0

$form->setAttribute('action', $this->url('login', [ 'query' => [ 'redirectTo' => $this->params()->fromQuery('redirectTo') ] ]);

Где 'Login' это имя маршрута входа.

См Url View Helper

+0

Я не думаю, что это сработает в представлении: $ this-> params() – HappyCoder

0

Ну мое решение не так элегантно, как я надеялся, что это будет. Я хотел избежать использования контроллера для параметров запроса. Как отметил @Stanimir, помощники зрения на самом деле, чтобы помочь с представлением, поэтому моя оригинальная идея была необоснованной.

Это конец к концу, что я поставил вместе:

контроллера:

$redirect_url = $this->params()->fromQuery('redirectTo',null); 

Возвращает это значение для просмотра на начальной загрузки:

return new ViewModel(['form' => $this->loginForm , 'redirect_url' => $redirect_url]); 

Посмотреть

$form->setAttribute(
    'action', 
    $this->url( 
     'customer/login', [] , 
     [ 'query'=> 
       [ 'redirectTo' => $this->redirect_url ] 
     ] 
    ) 
);