2017-04-09 54 views
-1

被宣布当我尝试创建或编辑一个游戏,我得到这个错误:如何解决:被允许语义错误注释ORM 列于法

[Semantical Error] Annotation @ORM\Column is not allowed to be declared on method AppBundle\Entity\Game::setType(). You may only use this annotation on these code elements: PROPERTY, ANNOTATION.

是什么造成这一点,我能要解决这个问题吗?

游戏

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 
use Symfony\Component\Validator\Constraints as Assert; 

/** 
* Game 
* 
* @ORM\Table(name="game") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\GameRepository") 
*/ 
class Game 
{ 

    /** 
    * @ORM\OneToMany(targetEntity="PlayLog", mappedBy="game") 
    */ 
    private $playlogs; 
    public function __construct() 
    { 
     $this->playlogs = new ArrayCollection(); 
    } 

    /** 
    * @ORM\ManyToOne(targetEntity="Type", inversedBy="games") 
    * @ORM\JoinColumn(name="type_id", referencedColumnName="id") 
    */ 
    private $type; 


    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 


    /** 
    * @var string 
    * @Assert\NotBlank() 
    * @Assert\Length(
    *  min = "3", 
    * max = "100" 
    *) 
    * @ORM\Column(name="name", type="string", length=255, unique=true) 
    */ 
    private $name; 


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

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

     return $this; 
    } 

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

    /** 
    * @return mixed 
    */ 
    public function getType() 
    { 
     return $this->type; 
    } 

    /** 
    * @ORM\Column (options={"default" = none}) 
    * @param mixed $type 
    */ 
    public function setType($type) 
    { 
     $this->type = $type; 
    } 


    /** 
    * @return mixed 
    */ 
    public function getPlaylogs() 
    { 
     return $this->playlogs; 
    } 

    /** 
    * @param mixed $playlogs 
    */ 
    public function setPlaylogs($playlogs) 
    { 
     $this->playlogs = $playlogs; 
    } 

    public function addPlayLog(PlayLog $playlog) 
    { 
     $this->playlog->add($playlog); 
     $playlog->setPlayLogs($this); 
    } 

} 

GameController

<?php 

namespace AppBundle\Controller; 

use AppBundle\Entity\Game; 
use AppBundle\Entity\PlayLog; 
use AppBundle\Entity\Type; 
use AppBundle\Form\GameType; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Component\Form\Extension\Core\Type\SubmitType; 
use Symfony\Component\Form\Extension\Core\Type\DateType; 
use Symfony\Component\HttpFoundation\Request; 
/** 
* Game controller. 
* 
* @Route("game") 
*/ 
class GameController extends Controller 
{ 
    /** 
    * Lists all game entities. 
    * 
    * @Route("/", name="game_index") 
    * @Method("GET") 
    */ 
    public function indexAction(Request $request) 
    { 
     $em = $this->getDoctrine()->getManager(); 
     $dql = "SELECT game FROM AppBundle:Game game JOIN game.type type ORDER BY game.name"; 
     $query = $em->createQuery($dql); 
     /* 
     * @var $paginator \Knp\Component\Pager\Paginator 
     */ 
     $paginator = $this->get('knp_paginator'); 
     $result = $paginator->paginate(
      $query, 
      $request->query->getInt('page', 1), 
      $request->query->getInt('limit', 25) 
     ); 
//  dump(get_class($paginator)); 

     return $this->render('game/index.html.twig', array(
      'games' => $result, 
      'max_limit_error' => 25 
     )); 
    } 

    /** 
    * Creates a new game entity. 
    * 
    * @Route("/new", name="game_new") 
    * @Method({"GET", "POST"}) 
    */ 
    public function newAction(Request $request) 
    { 

     $game = new Game(); 

     $form = $this->createForm('AppBundle\Form\GameType', $game); 
     $form->handleRequest($request); 

     if ($form->isSubmitted() && $form->isValid()) { 
      $em = $this->getDoctrine()->getManager(); 
      $em->persist($game); 
      $em->flush($game); 

      return $this->redirectToRoute('game_show', array('id' => $game->getId())); 
     } 

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

    /** 
    * Finds and displays a game entity. 
    * 
    * @Route("/{id}", name="game_show") 
    * @Method("GET") 
    */ 
    public function showAction(Game $game) 
    { 
     $deleteForm = $this->createDeleteForm($game); 


     return $this->render('game/show.html.twig', array(
      'game' => $game, 
      'delete_form' => $deleteForm->createView(), 
     )); 
    } 

    /** 
    * Displays a form to edit an existing game entity. 
    * 
    * @Route("/{id}/edit", name="game_edit") 
    * @Method({"GET", "POST"}) 
    */ 
    public function editAction(Request $request, Game $game) 
    { 
     $deleteForm = $this->createDeleteForm($game); 
     $editForm = $this->createForm('AppBundle\Form\GameType', $game); 
     $editForm->handleRequest($request); 

     if ($editForm->isSubmitted() && $editForm->isValid()) { 
      $this->getDoctrine()->getManager()->flush(); 

      return $this->redirectToRoute('game_show', array('id' => $game->getId())); 
     } 

     return $this->render('game/edit.html.twig', array(
      'game' => $game, 
      'edit_form' => $editForm->createView(), 
      'delete_form' => $deleteForm->createView(), 

     )); 
    } 

    /** 
    * Displays a form to edit an existing game entity. 
    * 
    * @Route("/{id}/log", name="game_log") 
    * @Method({"GET", "POST"}) 
    */ 
    public function addLogAction(Request $request, Game $game) 
    { 
     $playlog = new PlayLog(); 
     $form = $this->createForm(GameType::class, $game); 
     $form->handleRequest($request); 
     if($form->isSubmitted() && $form->isValid()) { 

      //Save playLog 
      $em = $this->getDoctrine()->getManager(); 
      $em->persist($playlog); 
      $em->flush(); 

     } 
     // Render/return view incl. formulier. 
     return $this->render('game/log.html.twig', array(
      'game' => $game, 
      'form' => $form->createView(), 
     )); 
    } 

    /** 
    * Deletes a game entity. 
    * 
    * @Route("/{id}", name="game_delete") 
    * @Method("DELETE") 
    */ 
    public function deleteAction(Request $request, Game $game) 
    { 
     $form = $this->createDeleteForm($game); 
     $form->handleRequest($request); 

     if ($form->isSubmitted() && $form->isValid()) { 
      $em = $this->getDoctrine()->getManager(); 
      $em->remove($game); 
      $em->flush($game); 
     } 

     return $this->redirectToRoute('game_index'); 
    } 

    /** 
    * Creates a form to delete a game entity. 
    * 
    * @param Game $game The game entity 
    * 
    * @return \Symfony\Component\Form\Form The form 
    */ 
    private function createDeleteForm(Game $game) 
    { 
     return $this->createFormBuilder() 
      ->setAction($this->generateUrl('game_delete', array('id' => $game->getId()))) 
      ->setMethod('DELETE') 
      ->getForm() 
     ; 
    } 
} 

类型

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 


/** 
* Type 
* 
* @ORM\Table(name="type") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\TypeRepository") 
*/ 
class Type 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="Game", mappedBy="type") 
    */ 
    private $games; 

    public function __construct() 
    { 
     $this->games = new ArrayCollection(); 
    } 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255) 
    */ 
    private $name; 




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

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

     return $this; 
    } 

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

    /** 
    * @return mixed 
    */ 
    public function getGames() 
    { 
     return $this->games; 
    } 

    /** 
    * @param mixed $games 
    */ 
    public function setGames($games) 
    { 
     $this->games = $games; 
    } 

    public function addGame(Game $game) 
    { 
     $this->games->add($game); 
     $game->setType($this); 
    } 
    public function removeGame(Game $game) 
    { 
     $this->games->removeElement($game); 
    } 



} 

TypeType

<?php 

namespace AppBundle\Form; 

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

class TypeType extends AbstractType 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('name')  ; 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'AppBundle\Entity\Type' 
     )); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function getBlockPrefix() 
    { 
     return 'appbundle_type'; 
    } 


} 

游戏/ new.html.twig

{% extends 'base.html.twig' %} 
{% import "macros.html.twig" as macro %} 

{% block content %} 
    <h1>New Game</h1> 

    <div class="col-md-4 col-md-offset-4"> 
     {{ form_start(form) }} 
     <table class="table table-bordered"> 
      <tr> 
       <td> 
        Name 
       </td> 
       <td> 
        {{ form_widget(form.name) }} 
       </td> 
      </tr> 
      <tr> 
       <td> 
        Type 
       </td> 
       <td> 
        {{ form_widget(form.type) }} 
       </td> 
      </tr> 
     </table> 
    </div> 
    <div class="row"> 
     <div class="col-md-4 col-md-offset-4"> 
      {{ macro.btnSubmitAndCancel() }} 
     </div> 
    </div> 

    {{ form_end(form) }} 

回答

1

错误告诉你,你不能使用@ORM\Column()注释上的一个方法。您必须将其从游戏实体中删除:

/** 
* @ORM\Column (options={"default" = none}) <--- REMOVE ME PLEASE 
* @param mixed $type 
*/ 
public function setType($type) 
{ 
    $this->type = $type; 
} 
相关问题