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自动加载不起作用的主要内容,如果未能解决你的问题,请参考以下文章

作曲家自动加载在生产服务器上不起作用

Composer psr-4 自动加载问题

laravel 4 中的自动加载助手

Laravel 供应商自动加载不起作用

自定义自动加载与 Composer 的自动加载冲突?

PHP Composer 自动加载