Importar clases en Symfony2

Tengo un fichero de conexion a Access por PHP que contiene una clase database con una serie de parámetros, etc para realizar la conexión a dicha "base de datos".
Esta clase se ha utilizado ya y funciona perfectamente.

Estoy empezando a desarrollar con symfony2 y he creado un bundle de ejemplo, con el siguiente controller:
<?php
namespace MDW\logisticaBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

//include_once("C:\wamp\www\prueba\clases\database.php");
?>






<?php




class DefaultController extends Controller
{
    public function indexAction($name)
    {
        return $this->render('MDWlogisticaBundle:Default:index.html.twig', array('name' => $name));
    }
   
    public function articulosAction()
    {
       //-- Simulamos obtener los datos de la base de datos cargando los artículos a un array
       $db=new database();
       $db->conectar();
       
       
       $articulos = array(
             array('id' => 1, 'title' => 'Articulo numero 1', 'created' => '2011-01-01'),
             array('id' => 2, 'title' => 'Articulo numero 2', 'created' => '2011-01-01'),
             array('id' => 3, 'title' => 'Articulo numero 3', 'created' => '2011-01-01'),
       );
       
       return $this->render('MDWlogisticaBundle:Default:articulos.html.twig', array('articulos' => $articulos));
    }
   
    public function articuloAction($id)
    {
       //-- Simulamos obtener los datos de la base de datos cargando los artículos a un array
       $articulos = array(
             array('id' => 1, 'title' => 'Articulo numero 1', 'created' => '2011-01-01'),
             array('id' => 2, 'title' => 'Articulo numero 2', 'created' => '2011-01-01'),
             array('id' => 3, 'title' => 'Articulo numero 3', 'created' => '2011-01-01'),
       );
   
       //-- Buscamos dentro del array el ID solicitado
       $articuloSeleccionado = null;
       foreach($articulos as $articulo)
       {
          if($articulo['id'] == $id)
          {
             $articuloSeleccionado = $articulo;
             break;
          }
       }
   
       //-- Invocamos a nuestra nueva plantilla, pasando los datos
       return $this->render('MDWlogisticaBundle:Default:articulo.html.twig', array('articulo' => $articuloSeleccionado));
    }
}



Lo de $articulos es un array que aún no hace nada.

El fichero database.php (que contiene la clase database) está en MDW\logisticaBundle\ControllerMDW\logisticaBundle\Controller.
De hecho, se carga mediante use, ya que si pongo un include peta porque ya está incluido el fichero.

Ejecuto y muestra:
The autoloader expected class "MDW\logisticaBundle\Controller\database" to be defined in file "C:\wamp\www\prueba/src/\MDW\logisticaBundle\Controller\database.php". The file was found but the class was not in it, the class name or namespace probably has a typo.
500 Internal Server Error - RuntimeException

Lo curioso es que me dice que el fichero se ha encontrado pero la clase no está en él.

-Si utilizo esto tal cual en un proyecto no symfony2, funciona OK
-Si copio-pego la clase en el fichero defaultController.php arriba pegado, funciona OK

Creo que mi problema está en la utilización de rutas de symfony, que no acabo de entender (aunque la ruta que muestra el error es correcta), pero me escama que me diga que el fichero está pero la clase no...

SOLUCIONADO:
Al principio del archivo de clases, hay que declarar el namespace que lo contiene.
Una vez hecho eso, hay que hacer un "use namespace" al principio del fichero que utilizará la clase.

Espero que os sirva, a mí me ha mareado un buen rato
Te iba a responder precisamente eso, que revisaras que la clase tuviera el namespace correcto, y el nombre de archivo y clase coincidieran.

Todo esto está en la documentación oficial, pero sí es cierto que al principio confunde un poco, sobre todo si no se está acostumbrado a trabajar con frameworks.

Un saludo.
Gracias rrb32 por tomarte la molestia ;)

Al principio ya sabes, la documentación la acabas leyendo cuando tienes un problema y no al revés, pero cuando estás en producción pues no sueles tener tiempo para empollar XD
Cuando estás en producción es todo a base de ensayo-error, y lo más rápido posible, no hay más XD

Un saludo.
3 respuestas