Как мне сгенерировать абсолютный URL в действии контроллера Zend Framework (1.11)? - PullRequest
3 голосов
/ 22 сентября 2011

У меня есть приложение на Facebook.
Facebook говорит, что мне нужно перенаправить на определенный URL-адрес 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. Так что абсолютный URL мне нужен, это мой собственный, а не фейсбук. Это означает, что использование метода setUseAbsoluteUri мне не поможет, так как будет работать с URL-адресом Facebook, а не с моим.

Ответы [ 2 ]

5 голосов
/ 22 сентября 2011

Использование помощников вида в вашем действии контроллера не будет отображать представление.

$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 голос
/ 22 сентября 2011

Может быть, вы можете взглянуть на исходный код помощников вида, чтобы получить «вдохновение». Например, 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);
}

Возможно, он не такой встроенный, как хотелось бы, но кода не так много, поэтому он может быть полезен.

Надеюсь, это поможет,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...