Composer PHP自动加载不起作用
Posted
技术标签:
【中文标题】Composer PHP自动加载不起作用【英文标题】:Composer PHP autoload not working 【发布时间】:2017-11-26 00:13:36 【问题描述】:对于我的 WebPanel,我创建了一个库,我可以通过 composer 毫无问题地安装它,但是当我想实现我的名为 View 的界面时,我收到了以下错误消息:
`2017/06/22 16:00:22 [error] 23179#23179: *120 FastCGI sent in stderr: "php
message: PHP Fatal error: Interface 'RaphaelScheinkoenig\WebLib\View' not
found in /var/www/site/app/view/DashboardView.php on line 10" while reading
response header from upstream, client: 88.xx.xxx.xxx, server:
xxxxxx.xxxxxx.xxxxx, request: "GET /dashboard HTTP/1.1", upstream:
"fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "xxxxxx.xxxxxx.xxxxx"`
Composer.json 的库:
`
"name": "raphaelscheinkoenig/weblib",
"description": "WebLib",
"license": "MIT",
"authors": [
"name": "Raphael Scheinkoenig",
"email": "scheinkoenig.raphael@gmail.com"
],
"minimum-stability": "stable",
"require":
"php": ">=7.0.0"
,
"autoload":
"psr-0":
"RaphaelScheinkoenig\\WebLib\\": "src/"
`
库的文件夹树:http://prntscr.com/fmwu6o
View.php 的库:
`<?php
namespace RaphaelScheinkoenig\WebLib;
interface View
public function getTitle():string;
public function getCSSPlugins():string;
public function getJsHeadScripts():string;
public function getContent():string;
public function getJSPlugins():string;
public function getActiveHeader():string;
public function getPluginInitialization():string;
public function getGoogleAnalytics():string;
public function getHeaderKey():string;
public function getFooter():string;
public function getPageHeader():string;
`
DasbordView.php 在 WebPanel 中的实现:
require_once ($_SERVER["P_PATH"]."vendor/autoload.php");
class DashboardView implements RaphaelScheinkoenig\WebLib\View
public function getTitle():string
return "Dashboard";
public function getCSSPlugins():string
$str = '<link rel="stylesheet" href="'.$_SERVER['P_PATH'].'assets/globals/css/plugins.css">';
return $str;
public function getPageHeader():string
return "Dashboard";
public function getJsHeadScripts():string
return "";
public function getContent():string
// TODO: Implement getContent() method.
public function getJSPlugins():string
$str = '<script src="'.$_SERVER['P_PATH'].'assets/admin1/js/layout.js"></script>';
return $str;
public function getActiveHeader():string
return "Dashboard";
public function getPluginInitialization():string
$str = "<script>
$(document).ready(function ()
Layout.init();
);
</script>";
return $str;
public function getGoogleAnalytics():string
$str = "";
return $str;
public function getHeaderKey():string
return "Dashboard";
public function getFooter():string
$str = '';
return $str;
` 提前感谢您的帮助。
拉斐尔·谢因科尼格
【问题讨论】:
你把View.php
放在哪里了?共享文件夹的树。
添加了上面库的树
那么您可能想要使用psr-4
而不是psr-0
。在您的 composer.json 文件中更改它,然后重建自动加载器。
【参考方案1】:
对于psr-0
,您应该将RaphaelScheinkoenig\WebLib\View
(View.php) 放入src/RaphaelScheinkoenig/WebLib
文件夹中。
仅供参考,psr-0
已被标记为已弃用。所以,只需使用psr-4
。如果您使用psr-4
,则无需创建src/RaphaelScheinkoenig/WebLib
文件夹。
【讨论】:
【参考方案2】:调整composer.json
中的自动加载配置以使用 PSR-4 而不是 PSR-0(如 cmets 中已建议的那样):
"name": "raphaelscheinkoenig/weblib",
"description": "WebLib",
"license": "MIT",
"authors": [
"name": "Raphael Scheinkoenig",
"email": "scheinkoenig.raphael@gmail.com"
],
"minimum-stability": "stable",
"require":
"php": ">=7.0.0"
,
"autoload":
"psr-4":
"RaphaelScheinkoenig\\WebLib\\": "src/"
参考见
http://www.php-fig.org/psr/psr-0/ http://www.php-fig.org/psr/psr-4/ https://***.com/a/24869629/1172545【讨论】:
以上是关于Composer PHP自动加载不起作用的主要内容,如果未能解决你的问题,请参考以下文章