Abraham Gomez
PreguntaAlguien me puede ayudar por favor.
Me sale este error y no se a que se deba:
Fatal error: Uncaught Error: Class ‘\Controllers\IndexController’ not found in C:\xampp\htdocs\phpRepasoPlatzi\public\index.php:54 Stack trace: #0 {main} thrown in C:\xampp\htdocs\phpRepasoPlatzi\public\index.php on line 54.
Ya intente cambiar el nombre de la clase, del archivo, jugué con las diagonales pero sigo sin solucionarlo.
Aqui mi archivo index.php dentro de la carpeta public.
`<?php ini_set('display_errors',1); ini_set('displat_starup_error',1); error_reporting(E_ALL); require_once '../vendor/autoload.php'; use Illuminate\Database\Capsule\Manager as Capsule; use Aura\Router\RouterContainer; $capsule = new Capsule; $capsule->addConnection([ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'cursophp', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ]); // Make this Capsule instance available globally via static methods... (optional) $capsule->setAsGlobal(); // Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher()) $capsule->bootEloquent(); $request = Zend\Diactoros\ServerRequestFactory::fromGlobals( $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES ); $routerContainer = new RouterContainer(); $map = $routerContainer->getMap(); $map->get('index','/phpRepasoPlatzi/',[ 'controller' => '\Controllers\IndexController', 'action' => 'indexAction' ]); $map->get('addJob', '/phpRepasoPlatzi/job/add','../addJob.php'); $map->get('addProject', '/phpRepasoPlatzi/project/add','../addProject.php'); $matcher = $routerContainer->getMatcher(); $route = $matcher->match($request); if(!$route) { echo 'No route'; } else{ $handlerData = $route->handler; $controllerName = $handlerData['controller']; $actionName = $handlerData['action']; $controller = new $controllerName; $controller->$actionName(); } ?>
Aqui mi codigo IndexController.php cabe mencionar que yo no hice la carpeta de app, la carpeta de Modals y Controllers la tengo directo en raiz, adapte mi codigo para que funcionara de esa manera.
namespace Controllers; class IndexController { public function indexAction(){ echo 'indexAction'; } }
-
Al inicio del curso cuando creamos el composer.json añadimos el autoload para que cargara nuestras clases que se encuentren dentro de /app/Controllers entonces cuando hacemos la búsqueda composer revisa dentro de app/ pero para ello debes colocar correctamente los namespaces, ví que en tu código tienes sólo namespace Controllers; ese debe ser el problema ya que no existe ese espacio en tu proyecto o más bien composer no busca directamente en la carpeta Controllers, lo que entendería ese namespace como si estuviera en la raíz y por eso no lo encuentra.
-
Verifica que el namespace hace uso del psr-4 " <NamespaceName>(<SubNamespaceNames>)<ClassName> " es decir que el espacio de nombres hace referencia a la ruta en la que está la clase:
ruta: app/Controllers/IndexController.php namespace App\Controllers;
Kenet Andrés Chungandro Montenegro
Tienes que revisar lo siguiente:

Jhon Carlos Romo Ramirez
Creo que debe ser así:
App\Controllers\IndexController

marco antonio cespedes mamani
Una de las cosas con las que estaba luchando y facil perdi como 15 minutos de mi vida... es en q el profesor ejecuta su servidor apache directamente a su carpeta de trabajo, por lo que todo el curso esta enteramente a "localhost" = "/"... no veo rapidamente que una modificacion que le hagamos a esta clase la podamos salvar. Supongo que mas adelante si. Conclusión: Error identificado es con tu "RepasoPlatzi" -modifica la ruta de server Apache y prueba
...Espero que sea de tu ayuda.

José Luis Soto
creo que el error esta en la linea 38, según yo debería ir así 'controller' => 'Controllers\IndexController', y lo tienes así 'controller' => '\Controllers\IndexController',
Si te sirve confirmas porfa