I am building a website with Laravel 5.
Laravel is using Composer as dependency management.
Whenever I run composer dump-autoload the autoload classes are generated.
Unfortunately the path in two of these files are wrong.
I am using one Seed class and some migrations within Laravel which is located in database/seeds respectively database/migrations.
The generated paths to all classes (migrations, seeds) below the database folder is wrong.
The path looks like $baseDir . '/atabase/migrations/2017_02_02_153131_create_cards_table.php'
As you can see the "d" from "database" is missing.
As far as I know the autoload classes are defined in the composer.json file.
But here it seems to be correct:
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
}
}
The migration is working, but the seeds are not.
When I do a search&replace and correct the path everything is fine unless I do composer dump-autoload
I am developing on a Windows 10 machine with Laravel 5.4.8 and Composer 1.3.2.
Edit:
Here is the output of composer dump-autoload -vvv
PS C:\Users\phoef\Documents\Projekte\CardViewer> composer dump-autoload -vvv
Reading ./composer.json
Loading config file ./composer.json
Checked CA file C:\Users\phoef\AppData\Local\Temp\composer-cacert- 300c74d6960d46715ffed607c8e36acfa7cbcad49862bb1b67d3c43dea9bfb40.pem: valid
Executing command (C:\Users\phoef\Documents\Projekte\CardViewer): git branch --no-color --no-abbrev -v
Reading C:/Users/phoef/AppData/Roaming/Composer/composer.json
Loading config file C:/Users/phoef/AppData/Roaming/Composer/composer.json
Reading C:\Users\phoef\Documents\Projekte\CardViewer/vendor/composer/installed.json
Reading C:/Users/phoef/AppData/Roaming/Composer/vendor/composer/installed.json
Running 1.3.2 (2017-01-27 18:23:41) with PHP 7.1.1 on Windows NT / 10.0
Generating autoload files
The two files containg the wrong path are: autoload_classmap.php and autoload_static.php.
Edit 2:
Please find below the complete composer.json
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"php": ">=5.6.4",
"laravel/framework": "5.4.*",
"laravel/tinker": "~1.0"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "~5.7"
},
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"scripts": {
"post-root-package-install": [
"php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
],
"post-install-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postInstall",
"php artisan optimize"
],
"post-update-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postUpdate",
"php artisan optimize"
]
},
"config": {
"preferred-install": "dist",
"sort-packages": true
}
}
The seeds and migrations live in the database/ directory (from project root), not inside app/. Do you'll have database/seeds/CardsTableSeeder.php, for example.
Did you create them using artisan?
php artisan make:migration create_cards_table
php artisan make:seed CardsTableSeeder
It's not required to do it this way but it's handy to be sure you get them in the right directory.
Here's my autoload, you're missing the psr-4 key.
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
}
}
I have noidea why it's doing atabase, sorry
You are doing something wrong. You need to reset project and start from start.
Related
I was trying to go live with a laravel project i developped a year back in school and i ran into some issue.
After uploading the whole project on my hosting service's server, i got these errors on my browser as well as on my SSH shell.
Fatal error: Uncaught exception 'ReflectionException' with message 'Class App\Http\Kernel does not exist' in /home/clients/ffa41f94063541f86a0fe6602a73caa1/myforms/vendor/laravel/framework/src/Illuminate/Container/Container.php:779
Stack trace: #0 /home/clients/ffa41f94063541f86a0fe6602a73caa1/myforms/vendor/laravel/framework/src/Illuminate/Container/Container.php(779): ReflectionClass->__construct('App\Http\Kernel') #1 /home/clients/ffa41f94063541f86a0fe6602a73caa1/myforms/vendor/laravel/framework/src/Illuminate/Container/Container.php(659): Illuminate\Container\Container->build('App\Http\Kernel', Array) #2 /home/clients/ffa41f94063541f86a0fe6602a73caa1/myforms/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(644): Illuminate\Container\Container->make('App\Http\Kernel', Array) #3 /home/clients/ffa41f94063541f86a0fe6602a73caa1/myforms/vendor/laravel/framework/src/Illuminate/Container/Container.php(229): Illuminate\Foundation\Application->make('App\Http\Kernel', Array) #4 /home/clients/ffa41f94063 in /home/clients/ffa41f94063541f86a0fe6602a73caa1/myforms/vendor/laravel/framework/src/Illuminate/Container/Container.php on line 779
I think it could be related to my namespace configuration, because i haven't all understood yet.
Here is my composer.json file :
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"laravel/framework": "5.0.*",
"illuminate/html": "5.*",
"barryvdh/laravel-dompdf": "0.5.*",
"guzzlehttp/guzzle": "~4.0"
},
"require-dev": {
"phpunit/phpunit": "~4.0",
"phpspec/phpspec": "~2.1"
},
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "myforms/app/"
}
},
"autoload-dev": {
"classmap": [
"tests/TestCase.php"
]
},
"scripts": {
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-update-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-create-project-cmd": [
"php -r \"copy('.env.example', '.env');\"",
"php artisan key:generate"
]
},
"config": {
"preferred-install": "dist"
}
}
What I have already done :
Delete /vendor and make a new install with composer install
composer dump-autoload
composer update
btw, I get the error when I insert the composer update
Please inform me if i should post another file that could be useful.
Thanks in advance for your help.
In composer.json change:
"psr-4": {
"App\\": "myforms/app/"
}
to:
"psr-4": {
"App\\": "app/"
}
On the server, in your source directory, run composer update then composer dump-autoload
PSR-4 in Laravel looks for namespaces relative to the root of the project
Check if console/kernel.php is inside of app-folder, if not it might be inside of your laravelApp.
If so, move console/kernel.php to app-folder.
In my case composer.json was missing propper bracket closing "{ }" and line with "psr-4" was in wrong json segment.
Check composer.json for proper align of "psr-4" it should be child of "autoload" section.
Remove vendor
composer install
OK
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"laravel/framework": "5.0.*",
"illuminate/html": "5.*",
"barryvdh/laravel-dompdf": "0.5.*",
"guzzlehttp/guzzle": "~4.0"
},
"require-dev": {
"phpunit/phpunit": "~4.0",
"phpspec/phpspec": "~2.1"
},
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "myforms/app/"
}
},
"autoload-dev": {
"classmap": [
"tests/TestCase.php"
]
},
"scripts": {
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-update-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-create-project-cmd": [
"php -r \"copy('.env.example', '.env');\"",
"php artisan key:generate"
]
},
"config": {
"preferred-install": "dist"
}
}
With the help of the other answers here, I realised I'd just missed a change when manually updating from Laravel 5.5 to 5.7
In composer.json, I'd missed this from the autoload block:
"autoload": {
"psr-4": {
"App\\": "app/"
},
...
},
If you're using version control, run composer update on your dev machine to update composer.lock. Then on your production server, you should only need to run composer install
I'm working locally on a Laravel project, and suddenly started getting the following exception:
ErrorException in FilesystemManager.php line 193:
Class 'League\Flysystem\AwsS3v3\AwsS3Adapter' not found (View: /Users/mypetproject/resources/views/layouts/topheader.blade.php) (View: /Users/mypetproject/resources/views/layouts/topheader.blade.php) (View: /Users/mypetproject/resources/views/layouts/topheader.blade.php)
A version of this is running on a server without any issue. Just to verify, I checked out the same branch, compared composer.json and composer.lock files and they are the same locally and on the server, did a composer update just in case, and it still fails locally but not in the server. The .env file is also the same.
FilesystemManager is in vender/laravel/framework/src/Illuminate/Filesystem and indeed attempts to use League\Flysystem\AwsS3v3\AwsS3Adapter as S3Adapter; however this is also the case with the version running on the server.
As a note, I'm not using S3 at all, and I don't really want to install league/flysystem-aws-s3-v3 since I'm not using it.
Any idea what could be wrong?
This is my composer.json
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"php": ">=5.5.9",
"laravel/framework": "5.3.*",
"laravelcollective/html": "5.3.*",
"guzzlehttp/guzzle": "^6.2",
"google/cloud-storage": "1.1.5"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "~4.0",
"phpspec/phpspec": "~2.1"
},
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
}
},
"autoload-dev": {
"classmap": [
"tests/TestCase.php"
]
},
"scripts": {
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-update-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-root-package-install": [
"php -r \"copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
]
},
"config": {
"preferred-install": "dist"
},
"minimum-stability": "dev",
"prefer-stable": true
}
I finally tracked it down to the autoload_static.php and autoload_classmap.php files in vendor/composer/
For some reason it was referencing an incorrect file (one previously using S3):
'App\\IsoClasses\\IsoStorage' => __DIR__ . '/../..' . '/app/IsoClasses/IsoStorageS3.php',
updated to
'App\\IsoClasses\\IsoStorage' => __DIR__ . '/../..' . '/app/IsoClasses/IsoStorage.php',
and it now works.
What is weird is that the dev server's files also have this, but it works in the dev server with no problems.
I was trying to go live with a laravel project i developped a year back in school and i ran into some issue.
After uploading the whole project on my hosting service's server, i got these errors on my browser as well as on my SSH shell.
Fatal error: Uncaught exception 'ReflectionException' with message 'Class App\Http\Kernel does not exist' in /home/clients/ffa41f94063541f86a0fe6602a73caa1/myforms/vendor/laravel/framework/src/Illuminate/Container/Container.php:779
Stack trace: #0 /home/clients/ffa41f94063541f86a0fe6602a73caa1/myforms/vendor/laravel/framework/src/Illuminate/Container/Container.php(779): ReflectionClass->__construct('App\Http\Kernel') #1 /home/clients/ffa41f94063541f86a0fe6602a73caa1/myforms/vendor/laravel/framework/src/Illuminate/Container/Container.php(659): Illuminate\Container\Container->build('App\Http\Kernel', Array) #2 /home/clients/ffa41f94063541f86a0fe6602a73caa1/myforms/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(644): Illuminate\Container\Container->make('App\Http\Kernel', Array) #3 /home/clients/ffa41f94063541f86a0fe6602a73caa1/myforms/vendor/laravel/framework/src/Illuminate/Container/Container.php(229): Illuminate\Foundation\Application->make('App\Http\Kernel', Array) #4 /home/clients/ffa41f94063 in /home/clients/ffa41f94063541f86a0fe6602a73caa1/myforms/vendor/laravel/framework/src/Illuminate/Container/Container.php on line 779
I think it could be related to my namespace configuration, because i haven't all understood yet.
Here is my composer.json file :
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"laravel/framework": "5.0.*",
"illuminate/html": "5.*",
"barryvdh/laravel-dompdf": "0.5.*",
"guzzlehttp/guzzle": "~4.0"
},
"require-dev": {
"phpunit/phpunit": "~4.0",
"phpspec/phpspec": "~2.1"
},
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "myforms/app/"
}
},
"autoload-dev": {
"classmap": [
"tests/TestCase.php"
]
},
"scripts": {
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-update-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-create-project-cmd": [
"php -r \"copy('.env.example', '.env');\"",
"php artisan key:generate"
]
},
"config": {
"preferred-install": "dist"
}
}
What I have already done :
Delete /vendor and make a new install with composer install
composer dump-autoload
composer update
btw, I get the error when I insert the composer update
Please inform me if i should post another file that could be useful.
Thanks in advance for your help.
In composer.json change:
"psr-4": {
"App\\": "myforms/app/"
}
to:
"psr-4": {
"App\\": "app/"
}
On the server, in your source directory, run composer update then composer dump-autoload
PSR-4 in Laravel looks for namespaces relative to the root of the project
Check if console/kernel.php is inside of app-folder, if not it might be inside of your laravelApp.
If so, move console/kernel.php to app-folder.
In my case composer.json was missing propper bracket closing "{ }" and line with "psr-4" was in wrong json segment.
Check composer.json for proper align of "psr-4" it should be child of "autoload" section.
Remove vendor
composer install
OK
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"laravel/framework": "5.0.*",
"illuminate/html": "5.*",
"barryvdh/laravel-dompdf": "0.5.*",
"guzzlehttp/guzzle": "~4.0"
},
"require-dev": {
"phpunit/phpunit": "~4.0",
"phpspec/phpspec": "~2.1"
},
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "myforms/app/"
}
},
"autoload-dev": {
"classmap": [
"tests/TestCase.php"
]
},
"scripts": {
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-update-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-create-project-cmd": [
"php -r \"copy('.env.example', '.env');\"",
"php artisan key:generate"
]
},
"config": {
"preferred-install": "dist"
}
}
With the help of the other answers here, I realised I'd just missed a change when manually updating from Laravel 5.5 to 5.7
In composer.json, I'd missed this from the autoload block:
"autoload": {
"psr-4": {
"App\\": "app/"
},
...
},
If you're using version control, run composer update on your dev machine to update composer.lock. Then on your production server, you should only need to run composer install
This sounds like a trivial mistake, but I've been unable to find the solution for hours.
I tried to use https://github.com/michaelbonds/laravel-db2 in my Laravel project, and I added it using composer.
Here's my composer.json.
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"php": ">=5.5.9",
"laravel/framework": "5.1.*",
"michaelb/laravel-db2": "~2.0"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "~4.0",
"phpspec/phpspec": "~2.1"
},
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
}
},
"autoload-dev": {
"classmap": [
"tests/TestCase.php"
]
},
"scripts": {
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"pre-update-cmd": [
"php artisan clear-compiled"
],
"post-update-cmd": [
"php artisan optimize"
],
"post-root-package-install": [
"php -r \"copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
]
},
"config": {
"preferred-install": "dist"
}
}
Here's the error:
PHP Fatal error: Class 'MichaelB\Database\DB2\DB2ServiceProvider' not found in /var/www/html/mysjsu/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php on line 146
and
[Symfony\Component\Debug\Exception\FatalErrorException]
Class 'MichaelB\Database\DB2\DB2ServiceProvider' not found
I found a similar question before on StackOverflow, and somebody suggested that the order matters. So, here's what I did in the following order:
add "michaelb/laravel-db2": "~2.0" to composer.json
run php ../composer.phar update
add MichaelB\Database\DB2\DB2ServiceProvider::class to the providers arary in config/app.php
run php artisan migrate
Any idea on what might've been the problem?
This package is a fork of cooperl/laravel-db2. The documentation is inaccurate.
He changed the namespace to MichaelB but never tagged this as a stable version, so when you composer require his ~2.0, packagist gives you an older version with the wrong namespace.
So when you run composer update, it runs some post-cmd scripts such as php artisan optimize which tries to pull from the config file but fails because that class doesn't exist.
Here's how to fix it:
Change composer.json to this version:
"michaelb/laravel-db2": "dev-master"
Run composer update --no-scripts
Then you should be good.
I am using laravel-analytics (https://github.com/spatie/laravel-analytics/) and have installed everything locally, works fine.
Whenever I try to upload to the server, however, I get the following error visiting the page: Class 'LaravelAnalytics' not found and I am trying to access it via: use \LaravelAnalytics as Analytics;
I am using both linux operating systems, both locally and on the server. I have also ran: composer update and now get: Nothing to install or update
I have checked the .json file and I can see the package I am trying to install is there.
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"php": ">=5.5.9",
"laravel/framework": "5.1.*",
"illuminate/html": "5.*",
"spatie/laravel-analytics": "^1.2"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "~4.0",
"phpspec/phpspec": "~2.1"
},
"autoload": {
"classmap": [
"database"
],
"files":
["app/Http/helpers.php"],
"psr-4": {
"App\\": "app/"
}
},
"autoload-dev": {
"classmap": [
"tests/TestCase.php"
]
},
"scripts": {
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"pre-update-cmd": [
"php artisan clear-compiled"
],
"post-update-cmd": [
"php artisan optimize"
],
"post-root-package-install": [
"php -r \"copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
]
},
"config": {
"preferred-install": "dist"
}
}
Anyone have any ideas to what I am missing or where I am going wrong?
I faced a similar problem. Uploading the vendor/composer folder worked for me !
Being myself confronted with this problem, I first would like to thank riza who put me on the path.
According to the documentation, after installed the service provider and facade, we have to do this command :
php artisan vendor:publish --provider="Spatie\Analytics\AnalyticsServiceProvider"
Which causes the following error : Class 'Spatie\Analytics\AnalyticsServiceProvider' not found
If we see into vendor/spatie/laravel-analytics/src, we can see that the required classes contain Laravel string at the beginning of their names.
Solution :
So to solve this error, we need to change the call made from the config/app.php file :
providers section. Change this :
Spatie\Analytics\AnalyticsServiceProvider::class,
by :
Spatie\LaravelAnalytics\LaravelAnalyticsServiceProvider::class,
aliases section, change this :
'Analytics' => Spatie\Analytics\AnalyticsFacade::class,
by :
'Analytics' => Spatie\LaravelAnalytics\LaravelAnalyticsFacade::class,
Then, run again the following command, to make it work (added Laravel string too) :
php artisan vendor:publish --provider="Spatie\LaravelAnalytics\LaravelAnalyticsServiceProvider"
Then go to config/ folder. You should see a file called laravel-analytics.php.
I had similar problem when I created own package. PHP Storm was finding class but when scripts started then status 500 was shown. The reason was simple - be sure that your package from vendor include in it's composer.json
"autoload": {
"classmap": [
"src/"
]
}
Then it will be autoloaded.
Change your psr-4 to this:
"psr-4": {
"App\\": "app/",
"vendor\\spatie\\" : "spatie/"
}
hope this work for you.
You have to add the class to the aliases (or use the FQCN):
// config/app.php
'aliases' => [
...
'LaravelAnalytics' => 'Spatie\LaravelAnalytics\LaravelAnalyticsFacade',
...
];
"require: {
"php": ">=5.5.9",
"laravel/framework": "5.1.*",
"illuminate/html": "5.*",
"spatie/laravel-analytics": "^1.2"**
}
Seems that you are using the php 5.* and that's why composer pulling the 1.2 version of the package which has different class.
I got the same problem a month ago
The read me file that you read to setup package is for 2.4 version which is for php 7.0
Just update your php 5.* to php 7.* or get the read me file of 1.2 version of package to setup package correctly
For details see my blog: Class not found error due to php version mismatch