标签: psr-4

PHP composer autoload没有加载类

我刚刚开始使用composer进行依赖管理,我很难弄清楚我是如何不遵守psr-4进行自动加载的,所以我在这里寻求建议.我有一个类可以生成已经在包装上的随机值.项目结构如下(我标记了composer.json文件A和B):

项目目录

  |classfile.php 
A |composer.json
  |vendor
   |autoload.php
    |ejfrancis
      |php-random-value
B       |composer.json
        |RandomValue.php        <--the class I want autoloaded    
Run Code Online (Sandbox Code Playgroud)

composer.json A.

{
    "require": {
        "ejfrancis/php-random-value": "dev-master"
    }
}
Run Code Online (Sandbox Code Playgroud)

composer.json B.

{
    "name": "ejfrancis/php-random-value",
    "description": "Secure random value generator.",
    "require": {
        "php": ">=5.3.0"        
    },
    "license": "MIT",
    "autoload": {
        "psr-4": {
            "ejfrancis\\" : ""
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

最后是RandomValue.php文件,它声明了ejfrancis命名空间

namespace ejfrancis;

class RandomValue{
  //foo
}
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时,我得到一个错误'类RandomValue not found',因此它不能正确自动加载.我不遵守psr-4,还是还有别的我做错了?我也尝试使用作曲家类图表进行自动加载"classmap" : ["RandomValue.php"],但没有成功.谢谢您的帮助

更新:我在composer.json B文件上运行'composer validate',它绝对有效

php autoload composer-php psr-4

3
推荐指数
1
解决办法
1万
查看次数

找不到Composer PSR-4自动加载类

我一直想弄清楚为什么自动加载对“ Authentication \ auth()”不起作用的原因。“ dBase \ db()”类正在很好地加载,但是我得到了:

错误:在第8行的/var/htdocs/dev/test.php中找不到类'Authentication \ auth'

当调用test.php时。

file_structure

根composer.json-

  "require": {
    "geeshoe/dbClass": "dev-develop",
    "geeshoe/authClass": "dev-master"
  },
  "autoload": {
    "psr-4": {
      "dBase\\": "vendor/geeshoe/dbclass/",
      "Authentication\\": "vendor/geeshoe/authClass/"
    }
  }
Run Code Online (Sandbox Code Playgroud)

authClass.php标头-

<?php
namespace Authentication;

use dBase\db;

class auth extends db
{
Run Code Online (Sandbox Code Playgroud)

test.php-

if (file_exists("vendor/autoload.php")) {
    require "vendor/autoload.php";
} else {
    echo "Dam.. Something went wrong!";
}
$test = new \dBase\db();
$var = new \Authentication\auth();
Run Code Online (Sandbox Code Playgroud)

如果有人能指出对我来说显而易见的话,那太好了。另外,出于测试目的,未在authClass-> composer.json文件中指定自动加载。

php namespaces autoload composer-php psr-4

3
推荐指数
1
解决办法
1208
查看次数

PHP 测试在本地通过,但在 Travis CI 上使用 Composer 失败,PSR-4 自动加载

任何人都可以帮助我理解为什么这些单元测试在通过本地设置时在 CI 上失败的原因。

存储库位于https://github.com/jabranr/test-ci

测试在https://travis-ci.org/jabranr/test-ci

测试在 CI 中失败,并显示一个致命错误: PHP Fatal error: Class 'JRI\JabranCI\Exception\FooBarException' not found in /home/travis/build/jabranr/test-ci/test/exception/FooBarExceptionTest.php on line 11

该软件包使用 PSR-4 自动加载。这是composer.jsonphpunit 配置。先感谢您!

php phpunit travis-ci psr-4

2
推荐指数
1
解决办法
647
查看次数

我如何使用composer包含phpmailer 5.2?

我正在尝试实例化我使用composer安装的PHP邮件程序类.该类位于vendor\phpmailer\phpmailer\class.phpmailer.php中

-Project
  -src
      -SmtpHandler.php
  -vendor
     -phpmailer
         -phpmailer
            class.phpmailer.php
  index.php
Run Code Online (Sandbox Code Playgroud)

我正在尝试在SmtpHandler中加载这个类,如下所示:

<?php
namespace Fusion;

require_once __DIR__ . '/../vendor/autoload.php';
class SmtpHandler {

var $mail;

function __construct () {
    $this->mail = new PHPMailer;
Run Code Online (Sandbox Code Playgroud)

我的composer.json文件是自动加载我的php类,如下所示:

 "autoload": {
    "psr-4": {
         "Fusion\\": "src"
    }

},
Run Code Online (Sandbox Code Playgroud)

当$ this-> mail = new PHPMailer; 被叫,我收到一个错误致命错误:在第8行的/var/www/proj/Project/src/SmtpHandler.php中找不到类'Fusion\PHPMailer'

我需要使用vendor\phpmailer\phpmailer\class.phpmailer吗?或者我使用psr-4错了?

谢谢

php phpmailer autoload psr-4

2
推荐指数
1
解决办法
3296
查看次数

哪个版本的PSR有效?

也许我完全不明白.我读到PSR是PHP标准推荐,但有几个版本的PSR,例如自动加载器使用PSR-4而不是基本编码标准使用PSR-1

我必须遵循特定的PSR版本或者我必须合并它们的好部分?

Symfony遵循PSR-0,PSR-1,PSR-2和PSR-4文档中定义的标准,然后每个框架使用不同的PSR?

php psr-4 psr-1

2
推荐指数
1
解决办法
747
查看次数

名称空间中允许使用PHP保留关键字?(公开,私有,默认)

PhpStorm突出显示以下命名空间是一个错误。

<?php

namespace App\Http\Controllers\Public;
Run Code Online (Sandbox Code Playgroud)

错误: Expected: identifier

一般来说。预留关键字publicfunction,)是否class不适合命名空间?

php namespaces keyword phpstorm psr-4

2
推荐指数
1
解决办法
1382
查看次数

自动生成优化的自动加载器

我正在使用 PHP 进行一个简单的项目,并且正在使用 PSR-4 自动加载。我只是不知道是否有运行方式composer dump-autoload -ocomposer install,让新用户无需键入composer dump-autoload -o以避免自动加载错误

{
    "name": "project/vendor",
    "license": "MIT",
    "authors": [
        {
            "name": "my name",
            "email": "myemail@gmail.com"
        }
    ],
    "require": {
        "phpunit/phpunit": "^7.5"
    },
    "autoload": {
          "psr-4": {
              "src\\": "src/"
           }
     },
     "scripts": {
        "run-test": ["./vendor/bin/phpunit tests/calculatorTests.php"]
    }
}
Run Code Online (Sandbox Code Playgroud)

php autoload composer-php psr-4

2
推荐指数
1
解决办法
3158
查看次数

错误:类“路径”不符合 PSR-4 配置

我正在尝试 PHP 编码标准包:https://github.com/inpsyde/php-coding-standards,但是当我开始运行 phpcs 时,我得到:

nickan@nickan-VirtualBox:~/src/wordpress/wp-content/plugins/my-plugin$ vendor/bin/phpcs ./src/model/Users.php 
E 1 / 1 (100%)



FILE: /home/src/wordpress/wp-content/plugins/my-plugin/src/model/Users.php
-------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
-------------------------------------------------------------------------------------------------------------------------------
 5 | ERROR | Class 'Plugin\Model\Users', located at
   |       | '/home/src/wordpress/wp-content/plugins/my-plugin/src/model/Users.php', is not
   |       | compliant with PSR-4 configuration. (Inpsyde.CodeQuality.Psr4.InvalidPSR4)
Run Code Online (Sandbox Code Playgroud)

这是路径中的文件my-plugin/src/model/Users.php

<?php declare(strict_types=1);

namespace Test\Model;

class Users
{

}
Run Code Online (Sandbox Code Playgroud)

我不明白出了什么问题,代码工作正常,但错误不断出现。我尝试使用不同的命名空间、更改文件夹等,但仍然无济于事,将不胜感激。谢谢。

psr-4 phpcs

2
推荐指数
1
解决办法
453
查看次数

实现辅助功能的有效方法?

我正在尝试实现一个辅助函数,它可以帮助我在 MVC 应用程序中“添加”路由(映射到控制器/操作)。

我的index.php 文件如下所示。

//  use block
use App\Router;
use App\Config;
use App\Core\Database;
use App\Bootstrap;

// dependencies
$router    = new Router;
$config    = new Config;
$database  = new Database($config);
$bootstrap = new Bootstrap($router, $database);

// routes
require '../App/Routes.php';


$bootstrap->router->dispatch($_SERVER['QUERY_STRING']);
Run Code Online (Sandbox Code Playgroud)

我的“路线”文件中有一条路线,我的路线如下所示。

$bootstrap->router->add('/home', ['controller' => 'home', 'action' => 'index']);
Run Code Online (Sandbox Code Playgroud)

我更愿意像这样简单地将根添加到我的文件中......

route('/home', ['controller' => 'home', 'action' => 'index']);
Run Code Online (Sandbox Code Playgroud)

所以我需要做一个辅助函数

问题

感谢 psr-4 自动加载,我知道如何在需要时提取类,但是当涉及到平面旧函数时,这一点不太清楚。如何将辅助函数干净地添加到 MVC 框架中,而无需到处添加 require 文件?

非常感谢您的时间和考虑!

php frameworks helper psr-4

1
推荐指数
1
解决办法
1558
查看次数

Composer Autoload.php未在实时主机上的命名空间和类中加载

我有一个简单的PHP Web应用程序,具有以下结构:

/         (composer.json .htaccess ...)  
/Core/    (Router.php, Controller.php ...)    
/App/     (/Controllers, /Models, /Views ...)    
/Public/  (index.php ...)  
/Vendor/  (autoload.php /composer ...)  
Run Code Online (Sandbox Code Playgroud)

代码在我的本地服务器上运行没有问题.

当我将它复制到实时服务器并对路由中的.htaccess进行必要的更改时,我收到以下错误:致命错误:未找到类'Core\Router'....我尝试了3个不同的主机但没有运气.

问题似乎与使用psr-4在名称空间和类中加载的composer autoload函数无关.我在composer.json文件中设置了这个:

{
"autoload": {
    "psr-4": {
         "Core\\": "Core/",
         "App\\": "App/"
    }
}
Run Code Online (Sandbox Code Playgroud)

我项目的代码在GitHub上

https://github.com/imoprojects/upbook

我是MVC结构编程的新手,也是以这种方式使用composer的新手.

如果有人可以协助可能发生的事情,我会非常感激.

干杯,伊恩

php .htaccess autoloader composer-php psr-4

1
推荐指数
1
解决办法
464
查看次数

PSR4 Composer自动加载命名空间

我一直在玩一些Composer自动加载,我遇到了一些问题所以目录结构是

index.php
app/
   helpers/
          router.php
vendor/
   composer/
          /*usual files*/
   autoload.php
Run Code Online (Sandbox Code Playgroud)

在我的内心,我composer.json有以下内容

"autoload": {
        "psr-4": {
            "App\\": "app/"
        }
    }
Run Code Online (Sandbox Code Playgroud)

在我的index.php我有

<?php
// Autoload our namespaces
require __DIR__.'/vendor/autoload.php';

use App\Helpers\Router;
$route = new Router;
Run Code Online (Sandbox Code Playgroud)

得到以下错误

Fatal error: Class 'App\Helpers\Router' not found in /var/www/public/index.php on line 6

我尝试了一些不同的东西来尝试让它工作,但我不确定我哪里出错了.这是我第一次在框架之外使用Composer进行自动加载,所以会很感激任何指导.

php composer-php psr-4

0
推荐指数
1
解决办法
1148
查看次数