Zend Framework 2 - 在表单操作中包含一个变量
Zend Framework 2 - Including a variable in a form action
我的登录表单可能会被重定向查询调用,我想知道是否有一种简单的方法可以将其包含在后续的 post 操作中。
用例用于 SSO 登录。
我的正常登录路径是:
/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,以便当用户点击登录时,它会 post 返回到我的表单?
谢谢!
编辑 -
显然,我可以在配置中创建一个 redirectTo 路由,并在对页面的初始调用上测试是否存在这样一个路由,并将其包含在表单中。然而,我的问题是这是否可以简单地从 viewscript 自动完成。
要从视图助手生成查询字符串参数,您需要使用查询键将它们指定为第三个参数。请参考 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,))));
$form->setAttribute('action', $this->url('login', [
'query' => [
'redirectTo' => $this->params()->fromQuery('redirectTo')
]
]);
其中 'login' 是登录路由的名称。
好吧,我的解决方案并不像我希望的那样优雅。我想避免将控制器用于查询参数。正如@Stanimir 指出的那样,视图助手实际上是为了帮助查看,所以我最初的想法是没有根据的。
这是我整理的全部内容:
控制器:
$redirect_url = $this->params()->fromQuery('redirectTo',null);
Returns 在初始加载时查看:
return new ViewModel( ['form' => $this->loginForm , 'redirect_url' => $redirect_url] );
查看
$form->setAttribute(
'action',
$this->url(
'customer/login', [] ,
[ 'query'=>
[ 'redirectTo' => $this->redirect_url ]
]
)
);
我的登录表单可能会被重定向查询调用,我想知道是否有一种简单的方法可以将其包含在后续的 post 操作中。
用例用于 SSO 登录。
我的正常登录路径是:
/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,以便当用户点击登录时,它会 post 返回到我的表单?
谢谢!
编辑 - 显然,我可以在配置中创建一个 redirectTo 路由,并在对页面的初始调用上测试是否存在这样一个路由,并将其包含在表单中。然而,我的问题是这是否可以简单地从 viewscript 自动完成。
要从视图助手生成查询字符串参数,您需要使用查询键将它们指定为第三个参数。请参考 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,))));
$form->setAttribute('action', $this->url('login', [
'query' => [
'redirectTo' => $this->params()->fromQuery('redirectTo')
]
]);
其中 'login' 是登录路由的名称。
好吧,我的解决方案并不像我希望的那样优雅。我想避免将控制器用于查询参数。正如@Stanimir 指出的那样,视图助手实际上是为了帮助查看,所以我最初的想法是没有根据的。
这是我整理的全部内容:
控制器:
$redirect_url = $this->params()->fromQuery('redirectTo',null);
Returns 在初始加载时查看:
return new ViewModel( ['form' => $this->loginForm , 'redirect_url' => $redirect_url] );
查看
$form->setAttribute(
'action',
$this->url(
'customer/login', [] ,
[ 'query'=>
[ 'redirectTo' => $this->redirect_url ]
]
)
);