2014-06-27 13 views
5

Ho esempio tipo di modulo personalizzato:Come generare un URL assoluto nel tipo di modulo personalizzato?

namespace Acme\SimpleBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

class ExampleType extends AbstractType 
{ 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 

     $builder->setAction(****-----GENERATE-ROUTE-ABSOLUTE-URL-HERE-----****) 
       ->add('email', 'text') 
       ->add('send', 'submit'); 
    } 

    public function getName() 
    { 
     return 'example'; 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'error_bubbling' => true 
     )); 
    } 

} 

Come si genera URL assoluto (come http://example.com/admin/check_form) per il percorso?

$this->generateUrl() non funziona, perché non è un controller e anche $this->get('router')->generate() non funziona, non so perché.

+0

Afaik è sufficiente aggiungere l'URL come stringa. Nulla deve essere generato poiché non dipende da nulla, è assoluto. Ho pensato che con example.com intendessi qualcosa al di fuori del tuo progetto. – colburton

+0

Bene, dovrebbe essere dinamico, in base al dominio corrente e alla directory in cui è posizionata l'app. – user3783550

+0

Se ha qualcosa a che fare con il tuo progetto, ci deve essere un percorso e un controller/azione per questo. Altrimenti i generatori non sapranno dove questo dovrebbe puntare. – colburton

risposta

12

ci sono due modi per farlo:

  • registrare il proprio tipo di modulo come il servizio e iniettare il router in esso: doc
  • Passare il tuo azione come opzione quando si crea il modulo nel controller:

    $form = $this->createForm(new FormType(), null, array('action' => $this->generateUrl('your_route', array(/* your route parameters */), true)); 
    

    Si noti che è necessario passare true come ultimo argomento al fine di costringere il router per generare un URL assoluto (come avete chiesto per Symfony < 2.8). Se si utilizza Symfony3, utilizzare UrlGeneratorInterface::ABSOLUTE_URL anziché true come suggerito da Emilie nei commenti.

+2

A partire da Symfony 2.8, devi usare 'UrlGeneratorInterface :: ABSOLUTE_URL' invece di' true' per il parametro referenceType o riceverai un errore deprecato – Emilie

Problemi correlati