Php 在composer autoloader中找不到类
我的Php 在composer autoloader中找不到类,php,composer-php,Php,Composer Php,我的composer.json中有这个 { "name": "laravel/laravel", "description": "The Laravel Framework.", "keywords": ["framework", "laravel"], "license": "MIT", "type": "project", "require": { "php": ">=7.0.0", "alchemy/zi
composer.json中有这个
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"php": ">=7.0.0",
"alchemy/zippy": "^0.4.8",
"barryvdh/laravel-debugbar": "^3.1",
"fideloper/proxy": "~3.3",
"graham-campbell/exceptions": "^10.0",
"intervention/image": "^2.4",
"intervention/imagecache": "^2.3",
"laravel/framework": "5.5.*",
"laravel/tinker": "~1.0",
"laravelcollective/html": "^5.5",
"symfony/dom-crawler": "^3.3"
},
"files": [
"vendor/redbutton/text-image-alpha/vendor/autoload.php"
],
"require-dev": {
"filp/whoops": "^2.1",
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "~6.0"
},
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
"psr-4": {
"App\\": "app/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"extra": {
"laravel": {
"dont-discover": [
]
}
},
"scripts": {
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate"
],
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover"
]
},
"config": {
"preferred-install": "dist",
"sort-packages": true,
"optimize-autoloader": true
}
}
我的软件包的php文件位于laravel安装中:
/vendor/redbutton/text image alpha/src/
当我尝试调用一个文件时,会收到以下消息:
Class 'Class 'RedButton\TextImageAlpha\TextImageAlpha' not found' not found
我使用此命令尝试调用该类:
$image = new \RedButton\TextImageAlpha\TextImageAlpha( 'some string' );
/vendor/redbutton/text image alpha/src/textmagealpha.php
中的文件如下所示:
<?php
namespace RedButton\TextImageAlpha;
use RedButton\TextImageAlpha\Exceptions;
use RedButton\Tools\Objects;
/**
* TextImageAlpha class convert a text to image.
*
* @author Tomas Rathouz <trathouz at gmail.com>
*/
class TextImageAlpha
{
// lots of code
}
好消息。我看了你的,你做得很好:
从composer.json中删除不必要的代码
我注意到在粘贴的composer.json
中有一些供应商文件的手动添加
"files": [
"vendor/redbutton/text-image-alpha/vendor/autoload.php"
],
嵌套在/vendor
中的/vendor
没有意义,因为它可能会重复自动加载并破坏它
另外,我在require
部分没有看到redbutton/text image alpha
,它应该在哪里
如何以正确的方式添加包?
要安装软件包,只需调用composer即可:
composer require redbutton/text-image-alpha
就这样
它应该出现在composer.json
中的require
部分。Composer将根据包的Composer.json
中的规则自动加载它
试验
我已经尝试了以下代码,并且正确地找到了类:
<?php
require __DIR__ . '/vendor/autoload.php';
$image = new \RedButton\TextImageAlpha\TextImageAlpha('some string');
var_dump($image);
类文件(src/textmagealpha.php
)中有什么名称空间?在composer.json中定义路径时,还需要以斜杠结尾:“src/”
。更新composer.json文件后,不要忘了执行composer dump autoload
。@MagnusEriksson我更新了我的问题。我已将/
添加到src路径,但没有任何帮助。您是手动创建文件夹/vendor/redbutton/text image alpha/src/
和所有文件,还是使用composer require
添加它们?如果手动添加它们,“主”(顶部)编写器文件不知道这一点。Composer不会自动包括/vendor
中的所有文件/文件夹。您需要告诉“主”编写器文件使用包编写器文件。@MagnusEriksson我已经手动创建了它,如何告诉“主”编写器文件包含我的文件夹?我应该把它放在require
或其他地方吗?如果您手动添加它,请尝试添加“文件”:[“vendor/redbutton/text image alpha/vendor/autoload.php”]
到主编写器文件“autoload”
-部分并运行编写器转储自动加载。这会让作曲家也装上自动装弹机。我的头在桌子上撞了好几天<代码>新建\PATH\TO\CLASS
成功了!我已经正确地包含了autoload.php
,但是我的类仍然没有出现,现在我知道了原因。谢谢
{
"require": {
"redbutton/text-image-alpha": "^1.0"
}
}