【问题标题】:Cakephp prefix routing not working on Linux - but works on WindowsCakephp 前缀路由在 Linux 上不工作 - 但在 Windows 上工作
【发布时间】:2018-04-11 10:31:38
【问题描述】:

我有一个 CakePHP 3 应用程序,它有不同的插件。这些插件似乎可以在开发 Windows 机器 WAMP 上加载和访问它们,一切正常。

一旦在 CentOS 服务器上,插件的前缀路由(例如“admin”)停止工作,出现缺少控制器错误:

日志错误:

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 中,应用程序被设置为带有 mod rewrite 的别名 - 在 WAMP 和 CentOS 服务器上:

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

本地和服务器的区别:

  • 服务器是Linux,大写/小写问题?
  • 相同的 PHP 版本,但 也许服务器 PHP 上缺少一些模块?
  • 服务器将http重定向到https

【问题讨论】:

  • 在大多数情况下,这是一个区分大小写的问题,因此您必须显示相关的控制器文件内容和名称。此外,无论何时收到错误,请始终发布 complete 错误,即包括 full 堆栈跟踪(最好是复制从日志中以正确可读的方式提供),以及错误页面的屏幕截图,因为它可能包含更多详细信息。
  • 查看错误页面,您的控制器命名空间/类/文件名看起来像那里显示的示例吗?
  • 是的,确实如此 - 在上面添加了它。
  • 路径/文件名匹配吗?你确定你已经部署了文件吗?如果两者都为真,则检查权限是否允许服务器/PHP 读取文件。还可以尝试在新服务器上减少自动加载器。
  • 路径/文件名匹配我相信 - 我粘贴了错误消息中的路径并且文件在那里。所以我认为确认文件已部署。许可就好了。它是 CakePHP 3.2 和 PHP 7。

标签: php cakephp cakephp-3.0


【解决方案1】:

爆炸!检查你的 CakePHP 版本 3.2.0 有这个错误。已在 3.2.1 中修复。

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

现在可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-09
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    相关资源
    最近更新 更多