2011-06-16 16 views

Respuesta

1

Sería algo así:

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

En Symfony cada aplicación es independiente de las demás, por lo que si es necesario llamar a una acción de otra aplicación, es necesario solicitarlo directamente .

Cada aplicación está representada por un controlador principal (frontend, backend, webapp), este controlador se encarga de la entrega de cada solicitud a la acción correspondiente (y muchas otras cosas como filtros, etc.).

Realmente recomiendo que leas esto, sería bastante más explicativa: Symfony - Inside the Controller Layer

+0

El uso de direcciones URL absolutas no es nada agradable ... – Arend

+0

Totalmente de acuerdo, no dije que fuera el mejor, pero es una forma, y ​​de ver los artículos publicados por usted, verá que son sigue utilizando la concatenación de texto para generar una url absoluta. – guiman

+0

Por supuesto, al final eso es lo que hacen los sistemas de enrutamiento :) – Arend

7

Hay un puesto el blog sobre eso aquí:

Hay una complemento para este:

Y hay algunas entradas del blog que lo explican:

Para dirigir a su interfaz para el backend, hay tres sencillos pasos:

1. Añadir a la configuración del backend los dos métodos siguientes

Estos métodos leen el enrutamiento de back-end, y lo utilizan para generar rutas Deberá proporcionar el enlace, ya que php no sabe cómo configuró su servidor web para la otra aplicación.

.

// 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. Puede vincular a su aplicación de una manera tan ahora:

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

3.Puesto que es un poco tedioso para escribir, puede crear un ayudante

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

El sfCrossLinkApplicationPlugin hace esto, esto, pero de una manera un poco más simple, que sería capaz de utilizar una sintaxis similar a la siguiente:

<?php if($sf_user->isSuperAdmin()):?> 
    <?php link_to('Edit Blog Post', '@backend.edit_post?id='.$blog->getId()) ?> 
<?php endif ?> 
Cuestiones relacionadas