Ich bin in ZF3, mit dem Zend-MVC-Skelett und versuchen, eine generische Route zu konfigurieren, die so viele URLs wie möglich übereinstimmen wird, wie ich sein möchte in der Lage, neue Controller zu erstellen (natürlich auch Action-Methoden) und diese sofort verfügbar zu haben.ZF3 zend-mvc generische Route für viele Controller in einem Modul funktioniert nicht
Der in der Dokumentation beschriebene allgemeine Ansatz besteht darin, eine Route zu schreiben, die dem Controller und der Aktion entspricht (dasselbe gilt für ZF2).
Hier ist meine module.config.php
namespace Application;
use Zend\Router\Http\Literal;
use Zend\Router\Http\Segment;
use Zend\ServiceManager\Factory\InvokableFactory;
return [
'router' => [
'routes' => [
'home' => [
'type' => Literal::class,
'options' => [
'route' => '/',
'defaults' => [
'controller' => Controller\IndexController::class,
'action' => 'index',
],
],
],
'default' => [
'type' => Segment::class,
'options' => [
'route' => '/application[/:controller[/:action]]',
'defaults' => [
'controller' => Controller\IndexController::class,
'action' => 'index',
],
'constraints' => [
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
],
],
],
],
],
'controllers' => [/* ... */],
'view_manager' => [/* ... */],
],
Es wirkt wie ein Zauber für http://localhost/
und http://localhost/application
die indexAction()
Funktion der IndexController
Klasse innerhalb der /module/Application/src/IndexController.php
Datei aufrufen.
Allerdings funktioniert es nicht, wenn ich versuche, die fooAction()
Funktion in den gleichen Controller (d. H. IndexController) zu bekommen. Es löst nicht korrekt http://localhost/application/foo
. und ich erhalte die folgenden Fehler:
A 404 error occurred
Page not found.
The requested controller could not be mapped to an existing controller class.
Controller:
foo (resolves to invalid controller class or alias: foo)
No Exception available
gleiche Fehler, wenn ich http://localhost/bar/foo
versuchen, die fooAction()
im barController
zu bekommen.
Haben Sie eine Ahnung, was damit nicht stimmt? Jede Hilfe wird geschätzt. Danke vielmals.
Entschuldigung für die Fehler in Tippfehler, ich sollte 'http: // localhost/application/index/foo' geschrieben haben, wie Sie es erwähnt haben. Der "Fehler" kam von den Aliasnamen, die fehlten. Es funktioniert jetzt. Danke. –
Ich verwende diese Zend-Anwendung in einem anderen Verzeichnis. Also wurde ich versucht "http: // localhost/zend/skeleton-application/public/application/index/test". Aber immer noch 404. Kannst du mir sagen, wo ich verpasst habe? –
Ich würde vermuten, dass es ein Problem mit der Serverkonfiguration gibt, vorausgesetzt, Sie verwenden eine der Dateien, die mit der Skeleton-Anwendung bereitgestellt werden. Es muss nach der Datei im öffentlichen Verzeichnis suchen und alles andere in index.php umschreiben; Ich denke, dass die Tatsache, dass Sie zf innerhalb eines Unterverzeichnisses des Dokumentenstamms haben, mit dem Routing in ZF3 unordentlich wird. Besser, dies als eine neue Frage zu posten. – avy