我目前正在开发基于facebook canvas(iframe)的应用程序。有没有办法让Zend框架输出这样的URL:
http://app.facebook.com/appName/controller/action
获得
http://www.domain.com/controller/action ?
这不是那么重要,因为基于iframe的应用程序一切正常,但我想提供更好的用户体验并获取网址
http://app.facebook.com/appName/
根本不是用户友好的。可能解决方案很容易,但我完全“堆叠”。该应用程序分为模块,所以我可以在Boostrap.php中改变它,这可能是解决方案在我的鼻子下面,但我看不到它..: - /
修改 也许我没有像我应该那样表达它。问题不在facebook内。问题出在 zend本身。它输出原始应用(例如myapp.example.com)网址,我希望它输出http://app.facebook.com/myapp
提前致谢。
的Lukas
答案 0 :(得分:0)
我不确定您的问题是什么,但Facebook已将收到的网址映射到您的应用程序。
例如,如果您的画布网址设置为http://domain.com/
且用户进入http://apps.facebook.com/appName/controller
,则会被Facebook映射到http://domain.com/controller
。
它适用于canvas / fbml和iframe应用程序。
要使Zend Framework生成具有备用基础的URL(即:http://apps.facebook.com/appName
),您可以在引导程序中执行此操作:
protected function _initBaseUrl() {
$front = $this->getResource('frontcontroller');
$front->setBaseUrl('http://apps.facebook.com/appName/');
}
如果您没有使用引导程序,则可以以其他方式获取前端控制器的实例并执行此操作:
$front = Zend_Controller_Front::getInstance();
$front->setBaseUrl('http://apps.facebook.com/appName/');
答案 1 :(得分:0)
最后,我设法解决了这个问题。所以对于其他开发人员,我在这里发布我的解决方案。
诚实是有点复杂,但是:
Use Zend_Controller_Router_Route_Hostname
使用示例可以在http://framework.zend.com/manual/en/zend.controller.router.html中找到,然后用经典路线链接它,如:
$hostnameRoute = new
Zend_Controller_Router_Route_Hostname(
':username.users.example.com',
array(
'controller' => 'profile',
'action' => 'userinfo'
)
);
$plainPathRoute = new Zend_Controller_Router_Route_Static('');
$router->addRoute('user', $hostnameRoute->chain($plainPathRoute);