2016-04-18 11 views
1

Wenn ich Form zu Formularklasse bewegen Ich habe Problem mit der Anzeige mein neues Formular, und ich habe nicht wirklich eine Ahnung, was Sie können, Ich tue, um diese Probleme zu bewältigen.Methode xyz für Objekt „Symfony Component Formular Formview“ existiert nicht

Ich benutze Symfony 3.0.4. und ich denke, dass ich alles von Symfony-Dokumentation und Tipps von StackOverFlow traf, aber viele dieser Daten stammen von Symfony 2.x.

Methode "save" für das Objekt "Symfony \ Component \ Formular \ Formview" existiert nicht in FlexPMUsersBundle: Standard: register.html.twig in Zeile 8 500 Internal Server Error - Twig_Error_Runtime

ich habe 4 Dateien:

src/FlexPM/UsersBundle/Ressourcen/Ansichten/Default/register.html.twig

{% extends 'base.html.twig' %} 

{% block body %} 
<div> 
    Test 
    {{ form_start(formRegister) }} 
     {{ form_errors(formRegister) }} 

     {{ form_row(formRegister.save) }} 
    {{ form_end(formRegister) }} 

</div> 
{% endblock %} 

src/FlexPM/UsersBundle/Controller/DefaultController.php

<?php 

namespace FlexPM\UsersBundle\Controller; 

use FlexPM\UsersBundle\Form\Type\UserRegister; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use FlexPM\UsersBundle\Entity\Users; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\Form\Extension\Core\Type\EmailType; 
use Symfony\Component\Form\Extension\Core\Type\PasswordType; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\Form\Extension\Core\Type\TextType; 
use Symfony\Component\Form\Extension\Core\Type\DateType; 
use Symfony\Component\Form\Extension\Core\Type\SubmitType; 

class DefaultController extends Controller 
{ 

    /** 
    * @Route("/register") 
    */ 
    public function registerAction(Request $request) 
    { 
     $newUser = new Users(); 
     $newUser->setEmail('[email protected]'); 
     $newUser->setPassword('1234'); 
     $newUser->setPermissions(1); 
     $newUser->setCreateDate(time()); 

     $formRegister = $this->createForm(UserRegister::class, $newUser); 

     $formRegister->handleRequest($request); 

     if($formRegister->isSubmitted() && $formRegister->isValid()){ 
      return $this->redirectToRoute('homepage'); 
     } 

     return $this->render('FlexPMUsersBundle:Default:register.html.twig', array(
      'formRegister' => $formRegister->createView(), 
     )); 
    } 
} 

src/FlexPM/UsersBundle/Form/Typ/UserRegister.php

<?php 
// src/FlexPM/Form/Type/UserRegister.php 
namespace FlexPM\UsersBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\Extension\Core\Type\PasswordType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\Form\Extension\Core\Type\EmailType; 
use Symfony\Component\Form\Extension\Core\Type\SubmitType; 
use Symfony\Component\OptionsResolver\OptionsResolver; 

class UserRegister extends AbstractType 
{ 

    public function registerForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('Save', SubmitType::class) 
     ; 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'FlexPM\UsersBundle\Entity\Users', 
     )); 
    } 

} 

src/FlexPM/UsersBundle/Entity/users.php

<?php 

namespace FlexPM\UsersBundle\Entity; 

use Symfony\Component\Validator\Constraints as Assert; 

/** 
* Users 
*/ 
class Users 
{ 
    /** 
    * @var integer 
    */ 
    private $id; 

    /** 
    * @var string 
    * @Assert\NotBlank() 
    * @Assert\Email(
    *  message = "The email '{{ value }}' is not a valid email.", 
    *  checkMX = true 
    *) 
    */ 
    private $email; 

    /** 
    * @var string 
    */ 
    private $name; 

    /** 
    * @var string 
    * @Assert\NotBlank() 
    * @Assert\Length(
    *  min = 8, 
    *  max = 50, 
    *  minMessage = "Your password must be at least {{ limit }} characters long", 
    *  maxMessage = "Your password cannot be longer than {{ limit }} characters" 
    *) 
    */ 
    private $password; 

    /** 
    * @var integer 
    */ 
    private $permissions; 

    /** 
    * @var \DateTime 
    */ 
    private $createDate; 

    /** 
    * @var \DateTime 
    */ 
    private $lastLogin; 

    /** 
    * @var string 
    */ 
    private $userCookie; 


    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set email 
    * 
    * @param string $email 
    * 
    * @return Users 
    */ 
    public function setEmail($email) 
    { 
     $this->email = $email; 

     return $this; 
    } 

    /** 
    * Get email 
    * 
    * @return string 
    */ 
    public function getEmail() 
    { 
     return $this->email; 
    } 

    /** 
    * Set name 
    * 
    * @param string $name 
    * 
    * @return Users 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * Set password 
    * 
    * @param string $password 
    * 
    * @return Users 
    */ 
    public function setPassword($password) 
    { 
     $this->password = $password; 

     return $this; 
    } 

    /** 
    * Get password 
    * 
    * @return string 
    */ 
    public function getPassword() 
    { 
     return $this->password; 
    } 

    /** 
    * Set permissions 
    * 
    * @param integer $permissions 
    * 
    * @return Users 
    */ 
    public function setPermissions($permissions) 
    { 
     $this->permissions = $permissions; 

     return $this; 
    } 

    /** 
    * Get permissions 
    * 
    * @return integer 
    */ 
    public function getPermissions() 
    { 
     return $this->permissions; 
    } 

    /** 
    * Set createDate 
    * 
    * @param \DateTime $createDate 
    * 
    * @return Users 
    */ 
    public function setCreateDate($createDate) 
    { 
     $this->createDate = $createDate; 

     return $this; 
    } 

    /** 
    * Get createDate 
    * 
    * @return \DateTime 
    */ 
    public function getCreateDate() 
    { 
     return $this->createDate; 
    } 

    /** 
    * Set lastLogin 
    * 
    * @param \DateTime $lastLogin 
    * 
    * @return Users 
    */ 
    public function setLastLogin($lastLogin) 
    { 
     $this->lastLogin = $lastLogin; 

     return $this; 
    } 

    /** 
    * Get lastLogin 
    * 
    * @return \DateTime 
    */ 
    public function getLastLogin() 
    { 
     return $this->lastLogin; 
    } 

    /** 
    * Set userCookie 
    * 
    * @param string $userCookie 
    * 
    * @return Users 
    */ 
    public function setUserCookie($userCookie) 
    { 
     $this->userCookie = $userCookie; 

     return $this; 
    } 

    /** 
    * Get userCookie 
    * 
    * @return string 
    */ 
    public function getUserCookie() 
    { 
     return $this->userCookie; 
    } 
} 

Haben Sie eine Idee, was kann ich tun?

--- --- SOLUTIONS:

src/FlexPM/UsersBundle/Form/Typ/UserRegister.php

<?php 
// src/FlexPM/Form/Type/UserRegister.php 
namespace FlexPM\UsersBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\Extension\Core\Type\PasswordType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\Form\Extension\Core\Type\EmailType; 
use Symfony\Component\Form\Extension\Core\Type\SubmitType; 
use Symfony\Component\OptionsResolver\OptionsResolver; 

class UserRegister extends AbstractType 
{ 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('save', SubmitType::class) 
     ; 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'FlexPM\UsersBundle\Entity\Users', 
     )); 
    } 

} 
+0

Die Fälle in Ihrem Typ und Zweig Vorlage stimmen nicht überein. 'speichern! == Speichern'. – qooplmao

+0

Danke - Antwort von @Codezilla und Ihre Unterstützung lösen das Problem –

Antwort

1

Sollte die Funktion buildForm nicht registerForm sein? Ich glaube nicht, dass registerForm jemals aufgerufen wird und da Sie versuchen, die Schaltfläche manuell {{ form_row(formRegister.save) }} auszugeben, löst es den Fehler aus, den Sie erhalten.

+0

Haben Sie Caching aktiviert? Versuchen Sie, den Cache zu löschen, wenn Sie dies tun. – Codezilla

+0

Ihre Lösungen waren sehr gut! Aber ich brauche noch eine Änderung, die von @qooplmao gezeigt wurde - Typ und Zweigvorlage stimmen nicht überein (speichern! == Speichern). –

Verwandte Themen