如何重定向到zend framework 2中的上一页?

如何重定向到zend framework 2中的上一页?

问题描述:

对于这些情况,我想自动重定向到从我发出请求的网页:如何重定向到zend framework 2中的上一页?

  1. 完成任何操作(CRUD等)之后 - 在这里,我想我们需要重定向到“HTTP_REFERER”
  2. 虽然冲浪或购物,如果需要登录,所以在完成认证过程之后,它应该回到重定向到同一页面

不同的情况(这是不是“重定向到前一页”):

  • 在查询中传递重定向URL(登录页面地址),例如:如果我发送一个(外部)/ URL(ofc编码)作为GET查询参数(或路由部分),登录后应该将其重定向到这个URL

我已经上搜索网,这和发现some solutions但他们没有按照Zend框架2。我希望所有这些都是以zf2的方式完成的。

感谢您的帮助!

那么,对于CRUD的东西,我只是简单地重定向到前一个动作的路线,通常是类似于admin-indexadministrate或其他什么。在这种情况下,我不明白为什么你需要HTTP_REFERER。然而,如果你仍然想访问HTTP_REFERER这是如此简单:

//SomeController.php 
$redirectUrl = $this->getRequest()->getHeader('HTTP_REFERER', $defaultValue); 

欲了解更多信息,请参阅Zend\Http\Request

一个重定向将使用来完成的Zend\Mvc\Controller\AbstractActionController

$this->redirect()->toUrl($redirectUrl); //or using a route: 
$this->redirect()->toRoute('some/route'); 

redirect()要看看你的用例的更多实例,我建议你查看一些非常适合你的用例的模块。这里最合适的可能是Zf-Commons\ZfcUserbjyoungblood\BjyAuthorize。对于这些例子中的每一个,我都链接了相关的代码示例,这些代码示例可以帮助您了解您的需求

+0

谢谢@Sam快速回复。这正是我一直在寻找:) – Sanju

+0

对不起,但你的链接已打破(+1无论如何) –

+0

@FopaLéonConstantin如果githubs链接中断,我的权力。我专门使用了提交链接,以便它们可用:S – Sam

这为我工作:

$url = $this->getRequest()->getHeader('Referer')->getUri(); 
$this->redirect()->toUrl($url); 

Neighter以上为我工作,但这样的:

$url = $this->getRequest()->getHeaders('cookie')->original_url; 
$this->redirect()->toUrl($url); 

【我虽然感激,如果有人清理了我,为什么“引荐方式“不适合我! :)谢谢!]

我认为referer字段只有当你点击链接并让自己被重定向到应得的页面时才会设置。以http://www.whatismyreferer.com/为例。 当你谷歌它,并点击链接,这将带你到这个网站,引用将是谷歌。但是,如果您将此网址复制并粘贴到您的网络浏览器,则引用者页面将不确定。我错了吗?

只是想从我来处理,如果用户来自另一个页面的最终代码共享一个片段:

$referer = $this->getRequest()->getHeader('Referer'); 
if ($referer) { 
    $refererUrl = $referer->uri()->getPath(); // referer url 
    $refererHost = $referer->uri()->getHost(); // referer host 
    $host = $this->getRequest()->getUri()->getHost(); // current host 

    // only redirect to previous page if request comes from same host 
    if ($refererUrl && ($refererHost == $host)) { 
     return $this->redirect()->toUrl($refererUrl); 
    } 
} 
// redirect to home if no referer or from another page 
return $this->redirect()->toRoute('home'); 

这里是一个很棒的技巧。

创建一个特质第一:

​​

然后一个接口:

<?php 

namespace Application; 

use Zend\Session; 

interface RefererAwareInterface 
{ 
    /** 
    * @param Session\Container $sessionContainer 
    */ 
    public function setSessionContainer(Session\Container $sessionContainer); 
} 

然后使用界面注入SessionContainer:

<?php 

namespace Application; 

class Module 
{ 
    public function getControllerConfig() 
    { 
     return [ 
      'factories' => [ 
      ], 
      'initializers' => array(
       function ($instance, $sm) { 
        if ($instance instanceof RefererAwareInterface) { 
         $instance->setSessionContainer(new Session\Container('Referer')); 
        } 
       } 
      ) 
     ]; 
    } 
} 
在你的控制器

然后:

<?php 

namespace Auth\Controller; 

class UsersController extends AbstractActionController implements RefererAwareInterface 
{ 
    use RefererRedirect; 

    public function indexAction() 
    { 
     $this->clearReferer(); 

     // do stuff 
    } 

    public function addAction() 
    { 
     $this->registerReferer(); 

     // do stuff 

     return $this->redirectToRefererOrDefaultRoute('auth/users'); 
    } 

    public function backAction() 
    { 
     return $this->redirectToRefererOrDefaultRoute('auth/users'); 
    } 
}