Symfony: единый URL без культуры пользователя - PullRequest
1 голос
/ 07 ноября 2011

Я рассматриваю возможность работы с продавцом в моем регионе, который предлагает услуги платежного шлюза. Конкретный продавец работает с концепцией «Платежная страница», то есть конкретный URI моего сайта, например, http://www.mysite.com/culture1/cart/index, будет авторизован со стороны продавца для осуществления платежа пользователя.

Мой сайт построен с использованием Symfony 1.4 и поддерживает i18n, поэтому все мои маршруты имеют встроенную в URL культуру (/:sf_culture/...)

т.е. для culture1 (по умолчанию):

http://www.mysite.com/culture1/cart/index

для culture2:

http://www.mysite.com/culture2/cart/index

Однако, если платеж поступает со второго URL-адреса, он просто не получит авторизацию на сайте продавца.

Итак, есть ли в Symfony какой-либо способ создать единый URL (с использованием маршрутизации) для конкретного действия в определенном модуле без встроенной информации о культуре, сохраняя при этом культуру пользователя?

В этом сценарии целью будет авторизация с использованием следующего URL:

http://www.mysite.com/cart/index

Ответы [ 2 ]

2 голосов
/ 07 ноября 2011

Конечно. Вы просто должны добавить его к своему routing.yml без :sf_culture. Культура сохраняется на атрибут пользователя. Так что :sf_culture требуется только в том случае, если вы измените свой язык и SEO.

1 голос
/ 07 ноября 2011

Маршрут с культурой, например:

contacts:  
  url:   /:sf_culture/contacts
  param: { module: static, action: contacts }
  requirements: { sf_culture: (?:uk) } 

Тот же маршрут без культуры:

contacts:  
  url:   /contacts
  param: { module: static, action: contacts }

Просто установите культуру по умолчанию для каждого пользователя, когда:

    homepage:
      url: /
      param: { module: static, action: about}
      requirements: { sf_culture: (?:uk }

    localized_homepage:
      url: /:sf_culture
      param: { module: static, action: about}
      requirements: { sf_culture: (?:uk) }

apps/frontend/modules/static/action.class.php

    public function executeAbout(sfWebRequest $request)
  {


   if (!$request->getParameter('sf_culture'))
        {
        if ($this->getUser()->isFirstRequest())
            {
            $culture = $request->getPreferredCulture(array('uk'));
            $this->getUser()->setCulture($culture);
            $this->getUser()->isFirstRequest(false);
            }
        else
            {
            $culture = $this->getUser()->getCulture();
            }

            $this->redirect('localized_homepage');
        }
  }

// apps / frontend / lib / myUser.class.php

public function isFirstRequest($boolean = null)
{
  if (is_null($boolean))
  {
    return $this->getAttribute('first_request', true);
  }

  $this->setAttribute('first_request', $boolean);
}

Если пользователь вводит ссылку, которая не содержит никакой культуры, то все в порядке, важно то, что она была ранее определена,Просто попробуйте)

Вы также можете установить культуру в действии:

$this->getUser()->setCulture('uk');

Обновление:

Если переменная sf_culture отсутствует в запросе, это означает, что пользователь зашел на / URL.Если это так, и сеанс новый, предпочтительная культура используется в качестве пользовательской культуры.В противном случае используется текущая культура пользователя.

Это из учебника Jobeet. ( click )

...