提问者:小点点

作曲家


我已经试着搜索这个问题,并看到了一些答案,但没有运气。。。

我已经用Slim Framework v3安装了composer。

我使用自动加载我的文件使用PSR-4在composer.json文件像这样:

"autoload": {
 "psr-4": {
   "App\\": "App"
 }
}

这是我的文件夹结构:

我使用Apache2.4在本地主机Mac OS X El Capitan上运行它,一切都像魔术一样工作。但是,当我将其上传到我的生产Linux服务器(同样使用Apache 2.4)时,自动加载似乎非常混乱,我会遇到如下错误:

警告:include(/home/friendsapp/public_html/vendor/composer/./../app/Middleware/AuthMiddleware.php):无法打开流:在/home/friendsapp/public_html/vendor/composer/ClassLoader中没有这样的文件或目录。php在线412

警告:包括():失败打开/首页/朋友应用程序/public_html/供应商/作曲家/.../.../app/Middleware/AuthMiddleware.php包含(include_path='.:/usr/lib/php:/usr/本地/lib/php')在 /home/friendsapp/public_html/vendor/composer/ClassLoader.php行412

致命错误:在第5行的 /home/friendsapp/public_html/public/index.php中找不到类'App\Middleware\AuthMiddleware'

我完全按照我的文件夹结构给我的类命名。

<?php

namespace App\Middleware;

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

use \App\Middleware\Middleware;

use \App\Share\ErrorCode;
use \App\Models\ResultMessage;

use \App\Mappers\AccessTokenMapper;

class AuthMiddleware extends Middleware {

任何帮助都将不胜感激!:)


共2个答案

匿名用户

查看错误/app/Middleware/AuthMiddleware中的路径。php

问题似乎是由生产环境中指向/AppApp\\命名空间冲突引起的,而不是指向/App的PSR-4声明。

为了避免冲突并映射指定目录的所有命名空间,您可以使用composer.json中的autoloadclass map或configOptimation-autoloader(可选)选项来定义指定目录中的所有文件和对象,供作曲家加载。此外,对于PSR-4声明,将尝试从App命名空间路径声明加载在类映射路径中未找到的任何文件。例如,当使用排除类映射选项时。

"config": {
    "optimize-autoloader": true
},
"autoload": {
    "psr-4": {
        "App\\": "App/"
    },
    "classmap": [
        "App/",
    ],
}

在您的composer.json中进行更改后,请确保在您的开发环境中运行phpcomposer.phar更新--lock

然后在上传composer.lockcomposer.json文件到正式生产环境后,运行phpcomposer.phar安装--no-dev-ophpcomposer.phar转储-自动加载--no-dev-o从正式生产环境。

-o选项将强制运行optimize autoloader类映射,并且--no dev将阻止安装开发包(require dev)。建议在生产环境中使用optimize autoloader

通常情况下,每当您将开发更改部署到正式生产环境时,您需要运行phpcomposer.phar安装--no-dev-o。这样,从您的开发环境中使用phpcomposer.phar更新应用的更改就可以正确地安装在您的正式生产环境中。

匿名用户

对于我的生产服务器,以下操作有效:

composer install --no-dev -o

然后重新启动php

在serverpilot上:

rm -rf vendor/*
composer5.6-sp install --no-dev -o
sudo service php5.6-fpm-sp restart