Symfony Многократное взаимодействие приложений - PullRequest
8 голосов
/ 16 июня 2011

Как в symfony 1.4 вызвать действие другого приложения из текущего действия?

Ответы [ 2 ]

7 голосов
/ 16 июня 2011

Здесь есть сообщение в блоге об этом здесь:

Для этого есть плагин :

И есть некоторые посты, объясняющие это:

Чтобы проложить маршрут к вашему интерфейсу и к бэкэнду, есть три простых шага:

1. Добавьте к своей конфигурации бэкэнда следующие два метода

Эти методы читают внутреннюю маршрутизацию и используют ее для генерации маршрутов. Вам нужно будет предоставить ссылку на него, так как php не знает, как вы настроили свой веб-сервер для другого приложения.

.

// apps/backend/config/backendConfiguration.class.php
class backendConfiguration extends sfApplicationConfiguration
{
  protected $frontendRouting = null;

  public function generateFrontendUrl($name, $parameters = array())
  {
    return 'http://frontend.example.com'.$this->getFrontendRouting()->generate($name, $parameters);
  }

  public function getFrontendRouting()
  {
    if (!$this->frontendRouting)
    {
      $this->frontendRouting = new sfPatternRouting(new sfEventDispatcher());

      $config = new sfRoutingConfigHandler();
      $routes = $config->evaluate(array(sfConfig::get('sf_apps_dir').'/frontend/config/routing.yml'));

      $this->frontendRouting->setRoutes($routes);
    }

    return $this->frontendRouting;
  }

  // ...
}

2. Теперь вы можете сделать ссылку на ваше приложение следующим образом:

$this->redirect($this->getContext()->getConfiguration()->generateFrontendUrl('hello', array('name' => 'Bar')));

3. Поскольку писать это немного утомительно, вы можете создать помощника

function link_to_frontend($name, $parameters)
{
  return sfProjectConfiguration::getActive()->generateFrontendUrl($name, $parameters);
}

sfCrossLinkApplicationPlugin делает это, вот, но немного проще, вы могли бы использовать синтаксис, подобный следующему:

<?php if($sf_user->isSuperAdmin()):?>
    <?php link_to('Edit Blog Post', '@backend.edit_post?id='.$blog->getId()) ?>
<?php endif ?>
1 голос
/ 16 июня 2011

Это будет примерно так:

public function executeActionA(sfWebRequest $request)
{
  $this->redirect("http:://host/app/url_to_action");
}

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

Каждое приложение представлено одним основным контроллером (веб-интерфейс, бэкэнд, веб-приложение), этот контроллер заботится о доставке каждого запроса к соответствующему действию (и многим другим вещам, таким как фильтры и т. д..).

Я действительно рекомендую вам прочитать это, это было бы более объяснительным: Symfony - Внутри уровня контроллера

...