Маршрутизация префикса cakephp не работает в linux, но работает в windows

У меня есть приложение CakePHP 3 и разные плагины. Плагины загружаются и обращаются к ним на машине разработчика Windows, WAMP, все работает нормально.

Попав на сервер CentOS, префиксная маршрутизация плагина, например, 'admin', перестает работать, получая ошибку отсутствующего контроллера: enter image description here

Ошибка журнала:

2018-04-11 12:40:23 Error: [Cake\Routing\Exception\MissingControllerException] Controller class Contacts could not be found.
Exception Attributes: array (
  'class' => 'Contacts',
  'plugin' => 'Contacts',
  'prefix' => 'admin',
  '_ext' => NULL,
)
Request URL: /myapp/contacts/admin/contacts
Referer URL: https://***/myapp/anotherplugin/participants
Stack Trace:
#0 /srv/www/myapp/myapp-app/webroot/index.php(36): Cake\Routing\Dispatcher->dispatch(Object(Cake\Network\Request), Object(Cake\Network\Response))
#1 /srv/www/myapp/myapp-app/index.php(16): require('/srv/www/mya...')
#2 {main}

Контроллер существует и содержит:

namespace Contacts\Controller\Admin;

use Contacts\Controller\AppController;

use Cake\ORM\TableRegistry;
use Authentication\Utility\TimeUtility;
use Cake\I18n\Time;
use Cake\Core\Configure;

class ContactsController extends AppController{

Маршрутизация без префикса кажется временем. Плагины добавляются в bootstrap.php следующим образом:

Plugin::load('Contacts', ['bootstrap' => false, 'routes' => true]);

В файле маршрутизации плагинов:

<?php
use Cake\Routing\Router;

Router::plugin('Contacts', function ($routes) {
    $routes->fallbacks('InflectedRoute');
});

Router::plugin('Contacts', function ($routes) {
    $routes->prefix('admin', function ($routes) {
        $routes->fallbacks('InflectedRoute');
    });
});

В Apache приложение настраивается как псевдоним с перезаписью мода - как на WAMP, так и на сервере CentOS:

http://server-or-localhost/myapp/

Различия между локальным и серверным:

  • Сервер Linux, проблемы с верхним / нижним регистром?
  • Те же версии PHP, но может быть, некоторые модули отсутствуют на сервере PHP?
  • Сервер перенаправляет http на https

В большинстве случаев это проблема чувствительности к регистру, поэтому вам нужно будет показать содержимое и имена задействованных файлов контроллера. Также при получении ошибок всегда публикуйте ошибка полный, то есть включая трассировку стека полный (в идеале скопированный из журналов, где он доступен в удобочитаемом виде), и снимок экрана страницы с ошибкой, поскольку он может содержать дополнительную информацию.

ndm 11.04.2018 13:00

Глядя на страницу с ошибкой, выглядит ли ваше пространство имен / класс / имя файла контроллера как показанный там пример?

ndm 11.04.2018 16:50

Да, есть - добавлено выше.

user95437 11.04.2018 17:05

И соответствует ли путь / имя файла? И вы уверены, что развернули файл? Если оба значения верны, проверьте, позволяют ли разрешения серверу / PHP читать файл. Также попробуйте перенаправить автозагрузчик на новый сервер.

ndm 11.04.2018 17:29

Я считаю, что путь / имя файла совпадает - я вставил путь из сообщения об ошибке, и файл был там. Думаю, это подтверждает, что файл развернут. Разрешение в порядке. Это CakePHP 3.2 и PHP 7.

user95437 12.04.2018 12:02
1
5
354
1

Ответы 1

Взрыв! Убедитесь, что в вашем CakePHP версии 3.2.0 есть эта ошибка. Исправлено в 3.2.1.

https://bakery.cakephp.org/2016/01/30/cakephp_3110_and_321_released.html

Теперь работает.

Другие вопросы по теме