我有一个facebook应用程序 Facebook说我需要重定向到某个facebook网址,以便用户为该应用程序授予权限。
我目前有一个查看phtml文件,以下工作正常:
<script type="text/javascript">
top.location.href = 'https://www.facebook.com/dialog/oauth?client_id=<?php echo $this->fbAppId?>&redirect_uri=<?php echo $this->serverUrl() . $this->baseUrl() . $this->url(array('controller' => 'index', 'action' => 'post-authorize'))?>&scope=publish_stream,user_birthday,user_about_me,user_activities,user_location';
</script>
然而 - 我想尝试一种不同的方法,通过不渲染视图来节省资源和处理时间,只需通过Location头重定向(使用重定向器动作助手或任何其他动作帮助器)
在视图脚本中,我使用ServerUrl
视图助手来生成绝对路径
如何在不使用视图助手的情况下在控制器中生成绝对路径?
我没有看到在MVC模式中使用控制器内部的视图助手是一种很好的做法。
注意:重定向到facebook,我自己的网站url作为get参数附加。所以我需要的绝对网址是我自己而不是facebook。这意味着使用setUseAbsoluteUri
方法对我没有帮助,因为它可以在facebook网址上运行,而不是我的。
答案 0 :(得分:5)
在控制器操作中使用视图助手不会呈现视图。
$redirectUri = $this->view->serverUrl() . $this->view->baseUrl() . $this->view->url(array('controller' => 'index', 'action' => 'post-authorize'))
$fbUrl = 'https://www.facebook.com/dialog/oauth?client_id='.$this->fbAppId.'&redirect_uri='.$redirectUri.'&scope=publish_stream,user_birthday,user_about_me,user_activities,user_location';
$this->_redirect($fbUrl);
在调用操作之前,无论如何都会在控制器中初始化View对象(而不是脚本)。
答案 1 :(得分:1)
也许您可以查看视图助手的源代码以获得一些“灵感”。例如,Zend_View_Helper_BaseUrl使用以下内容:
Zend_Controller_Front::getInstance()->getBaseUrl();
Zend_View_Helper_Url正在使用:
public function url(array $urlOptions = array(), $name = null, $reset = false, $encode = true)
{
$router = Zend_Controller_Front::getInstance()->getRouter();
return $router->assemble($urlOptions, $name, $reset, $encode);
}
可能不像人们想要的那样内置,但它不是很多代码,所以它可能会有所帮助。
希望有所帮助,