2016-07-01 11 views
0

Ich habe eine kleine Site basierend auf Zend Framework 2.3, das auf OS X mit OS X Server läuft. Ich muss etwas entwickeln, also habe ich es auf ein Debian 7-System kopiert. Abgesehen von den Datenbankdefinitionen ist der Code auf beiden Maschinen identisch. Das Linux-basierte System funktioniert für die meisten Funktionen, aber eine führt zu einem Fehler 404 und ich kann nicht sehen, warum dies sein sollte. Die module.config.php ist array ( 'invokables' => array ( 'LibraryRest \ Controller \ AuthorRest' => 'LibraryRest \ Controller \ AuthorRestController', 'LibraryRest \ Controller \ BookTitleRest' => 'LibraryRest \ Controller \ BookTitleRestController‘, 'LibraryRest \ Regler \ RecentRest' => 'LibraryRest \ Regler \ RecentRestController' ), 'Fabriken' => array ( 'LibraryRest \ Regler \ SearchRest' => 'LibraryRest \ Fabrik \ SearchRestControllerFactory' ) ), 'router' => array ( 'routen' => array (ZF2 Routing funktioniert unter OS X aber schlägt unter Linux fehl

    'author-rest' => array (
          'type' => 'Segment', 
          'options' => array (
            // Change this to something specific to your module 
            'route' => '/author-rest[/:id]', 
            'constraints' => array (
              'id' => '[0-9]+' 
            ), 
            'defaults' => array (
              'controller' => 'LibraryRest\Controller\AuthorRest' 
            ) 
          ) 
        ) 
        , 
        'booktitle-rest' => array (
          'type' => 'Segment', 
          'options' => array (
            'route' => '/booktitle-rest[/:id]', 
            'constraints' => array (
              'id' => '[0-9]+' 
            ), 
            'defaults' => array (
              'controller' => 'LibraryRest\Controller\BookTitleRest' 
            ) 
          ) 
        ), 
        'recent-rest' => array (
          'type' => 'Segment', 
          'options' => array (
            'route' => '/recent-rest', 
            'defaults' => array (
              'controller' => 'LibraryRest\Controller\RecentRest' 
            ) 
          ) 
        ), 
        'search-rest' => array (
          'type' => 'Segment', 
          'options' => array (
            'route' => '/search-rest[/:action[/:first][/:last]]', 
            'constraints' => array (
              'first' => '[a-zA-Z0-9_-\s\x40%\.]*', 
              'last' => '[a-zA-Z0-9_-\s\x40%]*', 
              'action' => '[a-zA-Z][a-zA-Z0-9_-]*' 
            ), 
            'defaults' => array (
              'controller' => 'LibraryRest\Controller\SearchRest' 
            ) 
          ) 
        ) 
      ) 
    ), 
    'view_manager' => array (
      'strategies' => array (
        'ViewJsonStrategy' 
      ) 
    ) 

); Die Route, die auf dem Linux-Rechner fehlschlägt, ist Such-Ruhe, also führt http://mysite/search-rest/search/John/Smith zu einem 404. Alle anderen Routen in diesem Modul funktionieren auf beiden Systemen korrekt.

Was könnte dazu führen, dass das Routing auf dem Linux-System fehlschlägt?

+0

Wahrscheinlich ein Problem mit der Groß- und Kleinschreibung. Überprüfen Sie den Dateinamen Ihres SearchRest-Controllers. –

Antwort

0

Persönlich würde ich versuchen, die Regex für die erste und letzte params Wechsel:

'search-rest' => array (
     'type' => 'Segment', 
     'options' => array (
      'route' => '/search-rest[/:action[/:first][/:last]]', 
      'constraints' => array (
       'first' => '[a-zA-Z0-9_\-\s\x40%\.]*', 
       'last' => '[a-zA-Z0-9_\-\s\x40%]*', 
       'action' => '[a-zA-Z][a-zA-Z0-9_-]*' 
      ), 
      'defaults' => array (
       'controller' => 'LibraryRest\Controller\SearchRest' 
       ) 
      ) 
     ), 

ich ein „\“, fügte kurz vor dem „-“ oder man, indem man die versuchen kann „-“ bei der Beginn der Zeichenklasse ([]).

Weil gerade jetzt ein Fehler in der ZF-Segment-Klasse beim internen Aufruf der Funktion preg_match() generiert wird. Da es einen Fehler gibt, führt dies zu einem 404, weil die Route nicht gefunden werden konnte.

+0

Brilliant. Die Regex war das Problem und Ihre Änderung löste es. Was mich jetzt verwirrt, ist, warum es unter OS X funktionierte. – user3017691

Verwandte Themen