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