2016-09-19 3 views
0

Ich habe Symfony in Version 2.8.11. Ich erstelle Form mit zwei Tasten und ich möchte nur etwas wie "Wenn Taste 1 angeklickt wird, umleiten zu einer Route, wenn Taste 2 cicked ist, umleiten zu einer anderen Route". In documentation fand ich die Methode namens isClicked(). Das Problem ist, dass ich diese Methode nicht aufrufen kann, weil sie nicht existiert (as seen in attached image). Was könnte das Problem sein?Symfony 2.8 Form Button isClicked

AdminIdType.php

<?php 

// src/AppBundle/Form/AdminIdType.php 
namespace AppBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 
use Symfony\Bridge\Doctrine\Form\Type\EntityType; 
use Symfony\Component\Form\Extension\Core\Type\SubmitType; 
use Symfony\Component\Form\Extension\Core\Type\ButtonType; 

class AdminIdType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('admins', EntityType::class, array('class' => 'AppBundle:Admin', 'choice_label' => 'idAdmina', 'multiple' => true)) 
      ->add('save', ButtonType::class, array('label' => 'Create Post')) 
      ->add('delete', SubmitType::class, array('label' => 'Delete Post')); 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'AppBundle\Entity\Admin', 
     )); 

    } 
} 

AdminController.php

<?php 

// src/AppBundle/Controller/AdminRegistrationController.php 
namespace AppBundle\Controller; 

use AppBundle\Form\AdminType; 
use AppBundle\Form\AdminIdType; 
use AppBundle\Entity\Admin; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\Form\Extension\Core\Type\TextType; 
use Symfony\Component\Form\ClickableInterface; 
use Symfony\Component\Form\Extension\Core\Type\ButtonType; 
use Symfony\Component\Form\Extension\Core\Type\SubmitType; 

class AdminController extends Controller 
{ 

    /** 
    * @Route("baza/admin/update", name="admin_update") 
    * @param Request $request 
    * @return type 
    */ 
    public function AdminUpdateAction(Request $request) 
    { 
     $admin = new Admin(); 
     $form = $this->createForm(AdminIdType::class, $admin); 

     $form->handleRequest($request); 

     // HERE I WANTED TO 
     // if ($form->get('delete')->isClicked) { 
     //  do smth 
     // } 

     return $this->render(
      'adminUpdate.html.twig', 
      array('form' => $form->createView()) 
     ); 
    } 
} 

Antwort

2

Funktion $form->getForm() im allgemeinen kehrt Objekt, das implementiert Schnittstelle FormInterface - und Methoden dieser Schnittstelle, die Sie in Ihrem Autocomplete haben.

Aber einige dieser Objekte können zusätzliche Methoden und \Symfony\Component\Form\SubmitButton implementiert FormInterface und auch ClickableInterface mit einem Verfahren isClicked

Also für Ihre $form->get('delete') diese Methode existieren, aber für $form->get('admins') wird es nicht.

Wenn Sie eine der automatischen Vervollständigung haben wollen, können Sie eine Methode mit PHPDoc Anmerkung werfen können, die von Ihrem IDE unterstützt werden sollte:

/** @var $deleteButton \Symfony\Component\Form\SubmitButton */ 
$deleteButton = $form->get('delete'); 
$deleteButton->isClicked(); // now you have autocomplete 

UPD: Und Ihre Aufmerksamkeit schenken: if ($form->get('delete')->isClicked()), nicht if ($form->get('delete')->isClicked)

+0

Nun, das Problem ist, dass die Methode 'isClicked()' überhaupt nicht existiert. Es ist nicht von IDE automatisch vervollständigt und wenn ich nur in Typ, ich habe folgende Fehlermeldung: 'Hinweis: Nicht definierte Eigenschaft: Symfony \ Component \ Formular \ SubmitButton :: isClicked $ 500 Internal Server Error - ContextErrorException' – Kamil

+0

Es ist tatsächlich arbeiten Wenn ich etwas mache: '$ form = $ this-> createFormBuilder ($ admin) -> hinzufügen ('save', SubmitType :: class, array ('label' => 'Aufgabe erstellen')) -> add ('saveAndAdd', SubmitType :: class, array ('label' => Speichern und Hinzufügen ')) -> getForm(); ' aber in ** AdminController.php **, statt * * AdminIdType.php **. Habe immer noch keine automatische Vervollständigung, egal wie ich Dinge eintippe. Es ist komisch. – Kamil

+0

Oh, das ist dann einfach. Siehe UPD –

Verwandte Themen