Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Error en el tutorial "Getting Starded" de Symfony

15 de noviembre de 2016

Buenas

Estoy siguiendo el "Getting Started" de Symfony y me he quedado atascado en http://symfony.com/doc/2.8/page_creation.html

Al probar la pagina:

http://localhost:8000/app_dev.php/lucky/number
http://localhost:8000/lucky/number

Obtengo la siguiente excepción:

[Semantical Error]
The class "Symfony\Component\Routing\Route" is not annotated with @Annotation.
Are you sure this class can be used as annotation? If so, then you need to add
@Annotation to the _class_ doc comment of "Symfony\Component\Routing\Route". If
it is indeed no annotation, then you need to add @IgnoreAnnotation("Route") to
the _class_ doc comment of method AppBundle\Controller\LuckyController::numberAction()
in C:\xampp\htdocs\primersf\src\AppBundle/Controller/ (which is being imported from "C:\xampp\htdocs\primersf\app/config\routing.yml").
500 Internal Server Error - FileLoaderLoadException
1 linked Exception:
 
    AnnotationException »

Soy nuevo en este framework. He buscado y he hecho cache:clear que da el mismo fallo

Nota: Uso Windows 7 y PHP 5.6 con el servidor embebido usando server:run como dice el manual. La pagina inicial y config.php funcionan perfectamente


Respuestas

#1

Por suerte me parece que el error es fácil de solucionar. Las anotaciones (como @Route) no es algo que PHP soporte de manera nativa (como sí hacen otros lenguajes de programación). Por eso al principio puede costar un poco más hacerlas funcionar.

Lo que siempre debes tener en cuenta son dos cosas:

  1. Las anotaciones tienen que estar dentro de comentarios que empiecen por /** Si el comentario empieza por /* la anotación se ignora y es como si no la hubieras escrito.
  2. Hay que importar (con use ...) la clase PHP que se encarga de procesar la anotación.

En tu caso, el problema es que has importado una clase Route que no es la correcta para la anotación @Route. Cambia lo siguiente en tu código:

// QUITA esta línea...
use Symfony\Component\Routing\Route;
 
// ...y AÑADE la siguiente línea
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

Para evitar estos problemas, fíjate que la documentación de Symfony siempre incluye en la parte de arriba los use ... necesarios para hacer funcionar el código que estás viendo. Otra forma de evitar estos errores sería utilizar un editor avanzado como PHPStorm, que casi siempre importa la clase correcta automáticamente.

@javiereguiluz

15 noviembre 2016, 12:04
#2

El fallo es el 2. Sabia lo de /** para usar anotaciones (aunque nunca la he usado) pero deje a Netbeans que me importara los use automaticamente. Intente copiar el ejemplo a mano para aprender mejor y no usar copy/paste Ha sido un fallo mio.

Un saludo y muchas gracias Javier

@antoniogarcia78

15 noviembre 2016, 12:12
#3

Otras clases que es habitual importarlas mal al principio son Request y Response. Cuando las utilices, asegúrate de que sean las del namespace HttpFoundation:

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
// ...

@javiereguiluz

15 noviembre 2016, 12:18