Hallo,
ich bin seit kurzem in meinen großen Projekt auf namespaces umgestiegen und muss dazu composer mit PSR-4 verwenden. Dementsprechend folge ich der Konvention pro Subnamespace einen gleichnamigen Ordner anzulegen.
Die Ordnerstruktur sieht so aus:
Ich möchte im Prinzip mit der use Anweisung einfach einen Namespace verwenden können, ohne jegliches weiteres manuelles Einbinden von PHP-Dateien. Composer soll hier auch Subnamespaces finden können. Meine autoload Sektion in der composer.json sieht bisher folgendermaßen aus:
Demnach soll <root-folder>/app/mvc/controller/IndexController.php folgendes finden können:
Die autoload Datei von composer wird natürlich an zentraler Stelle eingebunden. Ich verstehe nur nicht, warum so mit dieser Zusammenstellung eine weiße Seite kommt.
MFG derwunner
Edit: Mit dem qualifizierten Aufruf klappt es. Wie kann ich aber solche Subnamespaces unqualifiziert aufrufen? Ich müsste sonst meinen kompletten Code ändern. Wenn ich die Klasse String aufrufen möchte, dann klappt das mit den normalen magischen autoload so:
Mit dem autoload von composer klappt das aber nicht. Der qualifizierte Aufruf mit vorheriger use Anweisung wäre dann
ich bin seit kurzem in meinen großen Projekt auf namespaces umgestiegen und muss dazu composer mit PSR-4 verwenden. Dementsprechend folge ich der Konvention pro Subnamespace einen gleichnamigen Ordner anzulegen.
Die Ordnerstruktur sieht so aus:
Code:
<root-folder> app -> mvc -> controller -> model -> routes -> views -> src lib -> core -> Mvc -> Init -> Persistence -> modules [...]
Code:
"autoload": { "psr-4": { "Diana\\": "lib/core/" } },
PHP-Code:
namespace App\Mvc\Controller
{
use Diana\Core\Mvc\BaseController;
class IndexController extends BaseController
{
public function __construct()
{
// ...
}
}
}
MFG derwunner
Edit: Mit dem qualifizierten Aufruf klappt es. Wie kann ich aber solche Subnamespaces unqualifiziert aufrufen? Ich müsste sonst meinen kompletten Code ändern. Wenn ich die Klasse String aufrufen möchte, dann klappt das mit den normalen magischen autoload so:
PHP-Code:
new String('test');
PHP-Code:
new Diana\Std\String('test');
Kommentar