• Willkommen im Zend Framework Forum

    ZF1 Zend Framework 1 + ZF2 Zend Framework 2

    Das Zend Framework Forum ist seit 2006 die erste Anlaufstelle für Zend Framework Entwickler in Deutschland. Mit über 70.000 Beiträgen und einer steigenden Nutzerzahl bietet das Forum hilfreiche Themen und ZF-Tutorials für professionelle Entwickler, fortgeschrittene Programmierer sowie Zend Framework Einsteiger.
    Wenn dies Dein erster Besuch in der Zend Framework Community ist, lies bitte zuerst die Hilfe - FAQ durch. Du musst Dich registrieren, bevor Du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um die Registrierung zu starten. Du kannst auch jetzt schon Beiträge lesen. Hier im Forum findest Du die Zend Framework Hilfe, die Du suchst!

    Grüße an alle Zend Framework Entwickler. Das Team vom Zend Framework Forum!

    Drupal Agentur

Sporadische Routing-Probleme?? Hilfe erwünscht

SMEEagol

New member
Hallo ZFF Community,

ich stehe zur Zeit vor einem etwas eigenartigen Problem... Muss dazu sagen, dass ich erst seit einigen Wochen programmiere.
Und zwar dreht es sich um Folgendes:
Meine Standard-Route wird teilweise nicht korrekt interpretiert.

Hier mal ein Auszug aus meiner module.config.php:
PHP:
    'router' => array(
        'routes' => array(
            'index' => array(
                'type' => 'Literal',
                'options' => array(
                    'route'    => '/',
                    'defaults' => array(
                        'controller' => 'Main\Controller\Index',
                        'action'     => 'index',
                    ),
                ),
            ),
Der Controller ist in der selben config auch als invokable registriert (bringt keine Abhängigkeiten mit).

Das eigenartige an der Sache ist nun, dass ich beim ersten Seitenaufruf meistens(!) den korrekten Inhalt angezeigt bekomme, das Routing also funktioniert, der richtige Controller mit richtiger Action aufgerufen wird und ich das entsprechende View-Template zu sehen bekomme. (Controller liefert aktuell nur ein ViewModel(array()); zurück, Fehler auf Controllerseite können daher fast ausgeschlossen werden... Das View-Template enthält nur das Wort "Test", sollte also auch keine Fehler verursachen können)

Sollte der Seitenaufruf nun funktioniert haben, aktualisiere ich die Seite per F5 und bekomme nun mehr eine Fehlerseite präsentiert. Praktisch wird meine Layout.phtml gerendert, allerdings komplett ohne CSS (blanko HTML, sehr ansprechend...) die Meldung
[h=1]A 404 error occurred
[/h] [h=2]Page not found.[/h] The requested URL could not be matched by routing.

[h=3]No Exception available[/h]wird mir präsentiert. Dabei hat das Routing doch 3 Sekunden vorher noch wunderbar funktioniert?

Zur Umgebung auf der gearbeitet wird: Microsoft IIS 8 und PHP 5.4.

Anmerkung: Bei der fehlerhaft dargestellten Seite zeigen die Links der Navigation (teil der Layout.phtml) auch nicht mehr auf die korrekte BaseURL, sondern eine Instanz zu "hoch", was zu 403 Forbidden führt. Irgendwie passt der Kontext da nicht mehr ganz.

Auf jeden Fall wäre ich dankbar für jede Art von Fix/Workaround/Hilfestellung, da ich mir dieses Phänomen nicht erklären kann :X


MfG
SMEE
 

Powers

New member
Ganz unbekannt ist mir das Verhalten nicht, dass beim erneuten Aufruf die Route plötzlich falsch reagiert.

In der Regel lag das immer an einer relativen Pfadangabe. Heißt: Beim ersten Mal war der Pfad "/" korrekt, beim zweiten mal entstand darauß aber ein "//" in der URL, weil die relative Angabe vom ist-Punkt einfach eins draufsetzt.

Da Routing immer ein Raster der tatsächlichen URL ist -> sieht die URL denn so aus wie sie soll, oder gibt es da Merkwürdigkeiten beim erneuten Aufruf?
 

Kaiuwe

Super-Moderator
Willkommen im Forum! :)
Bei der fehlerhaft dargestellten Seite zeigen die Links der Navigation (teil der Layout.phtml) auch nicht mehr auf die korrekte BaseURL, sondern eine Instanz zu "hoch", was zu 403 Forbidden führt.
Hier liegt das Problem. Zeige doch mal deine URLs hier auf.
 

SMEEagol

New member
Danke! Hatte Urlaub, deshalb kommt die Resonanz etwas spät :)

EDIT: Ein zusätzlicher Hinweis: Beim ersten Aufruf scheint es prinzipiell zu funktionieren. Gebe ich die selbe URL nun erneut ein oder Refreshe, so entsteht der beschriebene Fehler. Vielleicht irgendeine Art von Cache-Problem? Warte ich eine kurze Zeit (ein paar Minuten) und rufe die Seite erneut auf, funktioniert der Routen-Aufruf wieder dieses eine Mal... ES TREIBT MICH IN DEN WAHNSINN :D

Beim refreshen meiner Index-Seite (das Problem tritt interessanterweise auch ausschließlich hier auf, die anderen Routen bleiben von dem Problem verschont) verändert sich die aufgerufene URL nicht.
Abgesehen davon, dass bei nicht gesetztem Slash am Ende der Route dieses Slash nachträglich noch hinzugefügt wird:
Code:
foo.beispielroute -> foo.beispielroute[B]/[/B]
Bei weiteren Aktualisierungen der Seite verharrt die URL aber in ihrem aktuellen Zustand.
Aufgerufen werden hierbei meine layout.phtml - die bei den anderen Routen allerdings auch keine Probleme bereitet - und die Index.phtml, welche einfach nur
PHP:
<?php
enthält, also blanko ist.
Innerhalb der layout.phtml verweise ich mit dem $this->basePath() und gegebenfalls konkateniertem String für die Route auf die Ressource. bspw.
PHP:
echo $this->basePath() . "/case-details"
Bei dem ersten, funktionierenden Aufruf zeigen die dargestellten Links auf server/projekt/beispielroute. Bei der "kaputten" Seite (nach Refresh/neuem Aufruf) zeigen sie nur noch auf server/beispielroute, was einen Server Error produziert... Dreht sich hier wie gesagt um einen IIS8, auf dem mehrere Seiten gehostet werden. Habe hier allerdings die Route projekt auf das public-Verzeichnis meiner ZF2 Anwendung zeigen lassen.

In der <div class="content"> wird dann <?= $this->layout()->content; ?> ausgegeben. Soweit eigentlich alles Best Practice aus der ZF2 Skeleton App, zumindest soweit ich das beurteilen kann.
PHP:
'router' => array(
        'routes' => array(
            'index' => array(
                'type' => 'Literal',
                'options' => array(
                    'route'    => '/',
                    'defaults' => array(
                        'controller' => 'Main\Controller\Index',
                        'action'     => 'index',
                    ),
                ),
            ),
            'casedetails' => array(
                'type' => 'Segment',
                'options' => array(
                    'route' => '/case-details/:id',
                    'constraints' => array(
                        'id' => '[1-9][0-9]*'
                    ),
                    'defaults' => array(
                        'controller' => 'Main\Controller\CaseDetails',
                        'action' => 'index',
                    ),
                ),
            ),
            'caseoverview' => array(
                'type' => 'Literal',
                'options' => array(
                    'route' => '/case-overview',
                    'defaults' => array(
                        'controller' => 'Main\Controller\CaseOverview',
                        'action' => 'case',                        
                    ),
                ),
            ),
            'fileoverview' => array(
                'type' => 'Literal',
                'options' => array(
                    'route' => '/file-overview',
                    'defaults' => array(
                        'controller' => 'Main\Controller\FileOverview',
                        'action' => 'file',                        
                    ),
                ),
            ),
            'filedetails' => array(
                'type' => 'Segment',
                'options' => array(
                    'route' => '/file-details[/:id]',
                    'constraints' => array(
                        'id' => '[1-9][0-9]*'
                    ),
                    'defaults' => array(
                        'controller' => 'Main\Controller\FileDetails',
                        'action' => 'detail',
                    ),
                ),
            ),
            'createcase' => array(
                'type' => 'Literal',
                'options' => array(
                    'route' => '/create-case',
                    'defaults' => array(
                        'controller' => 'Main\Controller\CreateCase',
                        'action' => 'create',
                    ),
                ),
            ),
Ich hoffe ich konnte ein paar weitere Anhaltspunkte liefern... Falls ich Details vergessen habe so seht es mir bitte nach, bin wie gesagt noch nicht so fit in Sachen Programmierung ... :<


PS: Echt schwierig das hier zu posten, nach dem man nur eine gewisse Anzahl an URLs verlinken darf :D
 
Zuletzt bearbeitet:
Oben