Hallo zusammen,
ich habe ein PHP Projekt, und nun musste die Ordnerstruktur umgestellt werden. Jetzt funktioniert trotz autoload das Projekt nicht mehr. Fehlermeldung:
PHP Warning: require(C:\Users\user1\Desktop\git\projektname\src \projektname/vendor/autoload.php): failed to open stream: No such file or directory in C:\Users\user1\Desktop\git\projektname\src\projekt name\run.php on line 21
Falls ich meinen Test ausführen will, bekomme ich folgende Fehlermeldung:
Error: Class 'projektname\RandomKlasse' not found
C:\Users\user1\Desktop\git\projektname\tests\proje ktname\RandomTestFürRandomKlasse.php:10
Zu erwähnen ist, dass das Projekt funktioniert, sobald der vendor Ordner im gleichen Ordner wie run.php + meine ganzen Klassen ist.
Meine Ordnerstruktur sieht wie folgt aus:
Meine autoload.php sieht so aus:
Meine composer.json sieht ungefähr so aus:
Meine run.php sieht so aus:
Meine RandomKlasse sieht so aus:
Und meine RandomTestKlasse:
Meine Frage nun ist:
Wie kriege ich es hin, dass ich vendor außerhalb lasse und mein Projekt trotzdem via autoload ineinander greift? Habe ich irgendwelche uses/includes/namespaces vergessen?
VG
ich habe ein PHP Projekt, und nun musste die Ordnerstruktur umgestellt werden. Jetzt funktioniert trotz autoload das Projekt nicht mehr. Fehlermeldung:
PHP Warning: require(C:\Users\user1\Desktop\git\projektname\src \projektname/vendor/autoload.php): failed to open stream: No such file or directory in C:\Users\user1\Desktop\git\projektname\src\projekt name\run.php on line 21
Falls ich meinen Test ausführen will, bekomme ich folgende Fehlermeldung:
Error: Class 'projektname\RandomKlasse' not found
C:\Users\user1\Desktop\git\projektname\tests\proje ktname\RandomTestFürRandomKlasse.php:10
Zu erwähnen ist, dass das Projekt funktioniert, sobald der vendor Ordner im gleichen Ordner wie run.php + meine ganzen Klassen ist.
Meine Ordnerstruktur sieht wie folgt aus:
PHP-Code:
projektname
|
+---src
| |
| +projektname
| |
| +resources (Ordner mit notwendigen .json und .yml Dateien)
| |
| + run.php
| + RandomKlasse.php
|
+---tests
| |
| +projektname
| |
| +RandomTestFürRandomKlasse.php
|
+---vendor
| |
| +--Ordner für monolog,phpunit,symfony usw.
| +--autoload.php
|
|
|
+composer.json
+composer.lock
+composer.phar
+phpunit.xml
+README.md
PHP-Code:
<?php
// autoload.php @generated by Composer
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit652d47d5aa164c2481679ffee0b92b7c::getLoader();
Meine composer.json sieht ungefähr so aus:
PHP-Code:
{
"name": "user1/projektname",
"description": "some description",
"minimum-stability": "stable",
"license": "proprietary",
"authors": [
{
"name": "user1",
"email": "user1@somecompany.com"
}
],
"autoload": {
"classmap": ["src/"]
},
"require": {
"author/some-sdk": "^1.0",
"symfony/yaml": "^4.1",
"monolog/monolog": "^1.23",
"phpunit/phpunit": "^7"
}
}
Meine run.php sieht so aus:
PHP-Code:
<?php
use Symfony\Component\Yaml\Yaml;
.
.
.
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use PHPunit\Framework\TestCase;
include("RandomKlasse.php");
include( ... );
# Composer autoload
require __DIR__ . '/vendor/autoload.php';
// some functionality
PHP-Code:
<?php
namespace projektname;
class RandomKlasse
{
private $attribute;
public function __construct($attribute)
{
$this->attribute = $attribute;
}
// getters and setters
PHP-Code:
<?php
namespace projektname;
use projektname\RandomKlasse;
class RandomTestKlasse extends \PHPUnit\Framework\TestCase
{
public function test_Constructor()
{
$randomKlasse= new RandomKlasse("attribute");
//$this->assertEquals ...
}
Wie kriege ich es hin, dass ich vendor außerhalb lasse und mein Projekt trotzdem via autoload ineinander greift? Habe ich irgendwelche uses/includes/namespaces vergessen?
VG
Kommentar