Генерация абсолютных URL в задачах Symfony - PullRequest
4 голосов
/ 26 июля 2010

У меня быстрый вопрос, касающийся создания абсолютных URL-адресов в рамках задачи Symfony. В основном у меня есть следующее:

  /**
   * This function returns the link to a route
   *
   * @param $context context from which to create the config from
   * @param $routingText this contains the text to be routed
   * @param $object if we are generating an object route we need to pass the object
   * @param boolean $absolute - whether to generate an absolute path
   * @return string
   */
  public static function getUrlFromContext($routingText, $object = null, $application = null, $debug = false,
                                           $absolute = false, $htmlSuffix=true)
  {
    $currentApplication = sfConfig::get('sf_app');
    $currentEnvironment = sfConfig::get('sf_environment');
    $context = sfContext::getInstance();
    $switchedContext = false;
    if (!is_null($application) && $context->getConfiguration()->getApplication() != $application)
    {
      $configuration = ProjectConfiguration::getApplicationConfiguration($application, $currentEnvironment,
                      $debug);
      $routing = sfContext::createInstance($configuration)->getRouting();
      $switchedContext = true;
    }
    else
    {
      $routing = $context->getRouting();
    }
    if (is_object($object))
    {
      $route = $routing->generate($routingText, $object, $absolute);
    }
    else
    {
      $route = $routing->generate($routingText, null, $absolute);
    }

    if ($switchedContext)
    {
      sfContext::switchTo($currentApplication);
    }

    if (strcasecmp($application, 'frontend') == 0 && strcasecmp($currentEnvironment, 'prod') == 0)
    {
      $route = preg_replace("!/{$currentApplication}(_{$currentEnvironment})?\.php!", $application, $route);
    }
    else
    {
      $route = preg_replace("/$currentApplication/", $application, $route);
    }

    return $route;
  }

Это позволяет мне создавать URL для любого приложения, просто переключая контекст. Большая проблема, с которой я сталкиваюсь, заключается в создании абсолютных URL-адресов в задаче Symfony. При создании маршрута в задаче я получаю следующее:

Http: //./symfony/symfony/omg-news/omg-news-channel/test002.html

Я предполагаю, что Symfony пытается угадать доменное имя от реферера, которого при использовании задач Symfony не существует.

URL-адрес должен выглядеть следующим образом:

http://trunk.dev/frontend_dev.php/omg-news/omg-news-channel/test002.html

Кто-нибудь смог создать маршрут, который представляет абсолютный URL из задачи Symfony? Если да, то сталкивались ли вы с этой проблемой, как вам удалось ее преодолеть?

Ответы [ 3 ]

5 голосов
/ 22 января 2012

Документация отвечает на этот вопрос.Для этого достаточно отредактировать файл конфигурации factories.yml:

all:
  routing:
    class: sfPatternRouting
    param:
      generate_shortest_url:            true
      extra_parameters_as_query_string: true
      context:
        host: example.org
1 голос
/ 17 апреля 2013

Похоже, вы также можете обмануть маршрутизацию только в своей задаче:

sfConfig::set('sf_factory_request_parameters', array('relative_url_root' => "", 'no_script_name' => true));
sfContext::createInstance($this->configuration);

Таким образом, вам не нужно изменять основной конфиг.

1 голос
/ 26 июля 2010

См. этот похожий вопрос , где я разместил следующий ответ :

 /**
 * Gets routing with the host url set to the url of the production server
 * @return sfPatternRouting
 */
 protected function getProductionRouting()
 {
   $routing = $this->getRouting();
   $routingOptions = $routing->getOptions();
   $routingOptions['context']['host'] = 'www.example.com';
   $routing->initialize($this->dispatcher, $routing->getCache(), $routingOptions);
   return $routing;
 }

Этот метод добавляется в наш базовый класс задач, в который мы добавляем другие распространенные методы задач, характерные для проекта.

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