2011-06-16 32 views
8

Symfony 1.4'de, geçerli eylemden başka bir uygulamanın eylemi nasıl çağrılır? Eğer başka bir uygulamanın bir eylem çağırmak gerekiyorsa, doğrudan talep gerekir böyleceSymfony Çoklu uygulama etkileşimi

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

Symfony'de her uygulama, diğerlerinden bağımsızdır:

cevap

1

Böyle bir şey olurdu . Her uygulama bir ana denetleyici (ön uç, arka uç, webapp) tarafından temsil edilir; bu denetleyici, her isteğin ilgili eylemi (ve filtreler, vb. Gibi başka şeyler) ile sağlanmasını sağlar.

Gerçekten bunu okumaktan tavsiye, oldukça fazla açıklayıcı olacaktır: Symfony - Inside the Controller Layer

+0

Mutlak url'leri kullanmak oldukça uzaktır .. – Arend

+0

Tamamen kabul ettim, en iyisi olduğunu söylemedim, ama bu bir yoldur, ve sizin tarafınızdan gönderilen zanaatkârlara bakarsanız, onların mutlak bir url oluşturmak için hala metin birleştirmeyi kullanıyor. – guiman

+0

Tabii ki, sonunda yönlendirme sistemleri böyle yapıyor :) – Arend

7

burada bu konuda bir blog yazısı var:

bir var bunun için eklenti:

https://github.com/rande/swCrossLinkApplicationPlugin Ve ister açıklayan bazı blog yayınlarımızı vardır:

Arka uç için önyüz için yönlendirmek için

, üç kolay adım vardır:

1.

Bu yöntemler arka uç yönlendirme okumak Aşağıdaki iki yöntem arka uç yapılandırmasına ekleyin ve kullanmak Rota üretmek için Bu bağlantıyı ona sağlamanız gerekir, çünkü php, web sunucunuzu diğer uygulama için nasıl yapılandırdığınızı bilmez.

.

// 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. Artık böyle bir moda uygulamanıza bağlayabilirsiniz:

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

3.

: yazmak için biraz sıkıcı olduğundan, sen

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

sfCrossLinkApplicationPlugin bu, bu, ama biraz daha basit bir şekilde, buna benzer bir sözdizimi kullanmak mümkün olacaktır olmayan bir yardımcı oluşturabilir

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