Fehler passiert auf Zeile 30 im index.php -> Class 'App\Post\PostController' not found in .../index.php. Kurioserweise beim Aufruf von get_declared_classes() in autoload.php gleich umittelbar nach implizitem Aufruf der Funktion wird App\Post\PostController als Klasse im Array aufgelistet
Datenstruktur ist folgende:
index.php
src/Post/ -> PostController.php, PostGateway.php
/startup/ -> autoload.php, dbconn.php, init.php
index.php
PostController.php
init.php
autoload.php
Datenstruktur ist folgende:
index.php
src/Post/ -> PostController.php, PostGateway.php
/startup/ -> autoload.php, dbconn.php, init.php
index.php
PHP-Code:
<?php
namespace App;
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json; charset=UTF-8');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Max-Age: 3600');
header('Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With');
include_once('./startup/init.php');
//var_dump(new Post\PostController());
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$uri_parts = explode('/', $uri);
$requestMethod = $_SERVER['REQUEST_METHOD'];
$ressourceClass = $uri_parts[1];
$id = null;
if(isset($uri_parts[2])){
$id = (int) $uri_parts[2];
}
switch ($ressourceClass) {
case 'posts':
$controller = new Post\PostController($dbconn, $requestMethod, $id);
$controller->processRequest();
break;
default:
header('HTTP/1.1 404 Not Found');
exit();
// break;
}
?>
PHP-Code:
namespace App\Post;
class PostController****{...}
PHP-Code:
namespace App;
echo 'autoload will load';
require __DIR__.'/autoload.php';
require __DIR__.'/dbconn.php';
PHP-Code:
spl_autoload_register(function ($class) {
// project-specific namespace prefix
$prefix = 'App\\';
// base directory for the namespace prefix
$base_dir = dirname(dirname(__FILE__)) . '/src/';
// does the class use the namespace prefix?
$len = strlen($prefix);
if (strncmp($prefix, $class, $len) !== 0) {
// no, move to the next registered autoloader
return;
}
// get the relative class name
$relative_class = substr($class, $len);
// replace the namespace prefix with the base directory, replace namespace
// separators with directory separators in the relative class name, append
// with .php
$file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
print 'File: '.$file;
// if the file exists, require it
if (file_exists($file)) {
require $file;
print_r(get_declared_classes());
$controller = new App\Post\PostController(null, 'GET', 1);
}
});
Kommentar