14
votes

When I try to update our existing project from Laravel 5.1 to Laravel 5.2 using the official guide, I get an error after composer update when the post update

php artisan clear-compiled

is run. Here is the error.

Class Illuminate\Foundation\Composer does not exist

Has anyone had a similar problem? When I run composer update with the no scripts flag it updates regularly so it's a problem on the clear-compiled.

Below are my Service Providers and my composer.json file.

Service Providers

    Illuminate\Auth\AuthServiceProvider::class,
    Illuminate\Broadcasting\BroadcastServiceProvider::class,
    Illuminate\Bus\BusServiceProvider::class,
    Illuminate\Cache\CacheServiceProvider::class,
    Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
    Illuminate\Cookie\CookieServiceProvider::class,
    Illuminate\Database\DatabaseServiceProvider::class,
    Illuminate\Encryption\EncryptionServiceProvider::class,
    Illuminate\Filesystem\FilesystemServiceProvider::class,
    Illuminate\Foundation\Providers\FoundationServiceProvider::class,
    Illuminate\Hashing\HashServiceProvider::class,
    Illuminate\Mail\MailServiceProvider::class,
    Illuminate\Pagination\PaginationServiceProvider::class,
    Illuminate\Pipeline\PipelineServiceProvider::class,
    Illuminate\Queue\QueueServiceProvider::class,
    // Illuminate\Redis\RedisServiceProvider::class,
    Vetruvet\PhpRedis\PhpRedisServiceProvider::class,
    Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
    Illuminate\Session\SessionServiceProvider::class,
    Illuminate\Translation\TranslationServiceProvider::class,
    Illuminate\Validation\ValidationServiceProvider::class,
    Illuminate\View\ViewServiceProvider::class,
    Collective\Html\HtmlServiceProvider::class,
    Laravel\Socialite\SocialiteServiceProvider::class,
    Intervention\Image\ImageServiceProvider::class,
    Torann\GeoIP\GeoIPServiceProvider::class,
    Jenssegers\Agent\AgentServiceProvider::class,
    Barryvdh\Debugbar\ServiceProvider::class,

composer.json

{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
    "php": ">=5.5.9",
    "laravel/framework": "5.2.*",
    "fzaninotto/faker": "^1.6@dev",
    "laravelcollective/html": "5.2.*",
    "laravelcollective/remote": "~5.2",
    "kriswallsmith/assetic": "^1.3@dev",
    "pda/pheanstalk": "^3.0@dev",
    "aws/aws-sdk-php-laravel": "~3.0",
    "illuminate/http": "~5.2",
    "illuminate/session": "~5.2",
    "illuminate/support": "~5.2",
    "nesbot/carbon": "~1.18",
    "guzzlehttp/guzzle": "~5.3|~6.0",
    "vetruvet/laravel-phpredis": "dev-master",
    "predis/predis": "^1.1@dev",
    "laravel/socialite": "^3.0@dev",
    "intervention/image": "^2.3@dev",
    "brightcove/api": "^1.0@dev",
    "torann/geoip": "dev-master",
    "graham-campbell/throttle": "~5.1",
    "jenssegers/agent": "^3.0@dev"
},
"require-dev": {
    "mockery/mockery": "0.9.*",
    "phpunit/phpunit": "~4.0",
    "phpspec/phpspec": "~2.1",
    "symfony/dom-crawler": "~3.0",
    "symfony/css-selector": "~3.0",
    "barryvdh/laravel-debugbar": "^2.0@dev",
    "laracasts/generators": "dev-master"
},
"repositories": [
    {
        "type": "git",
        "url": "https://github.com/nardev/laravel-vzaar.git"
    }
],
"autoload": {
    "classmap": [
        "database",
        "app/Models",
        "app/Footgoll"
    ],
    "files": [
        "app/helpers.php"
    ],
    "psr-4": {
        "Myapp\\": "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
}

When I run

grep -nH -d recurse 'Composer' bootstrap/ app/ config/

This is what is returned:

bootstrap/autoload.php:7:| Register The Composer Auto Loader bootstrap/autoload.php:10:| Composer provides a convenient, automatically generated class loader bootstrap/autoload.php:42:| when working locally. However we will need to load in the Composer

This is how the autoload.php file looks like:

    <?php

define('LARAVEL_START', microtime(true));

/*
|--------------------------------------------------------------------------
| Register The Composer Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader
| for our application. We just need to utilize it! We'll require it
| into the script here so that we do not have to worry about the
| loading of any our classes "manually". Feels great to relax.
|
*/

require __DIR__.'/../vendor/autoload.php';

/*
|--------------------------------------------------------------------------
| Include The Compiled Class File
|--------------------------------------------------------------------------
|
| To dramatically increase your application's performance, you may use a
| compiled class file which contains all of the classes commonly used
| by a request. The Artisan "optimize" is used to create this file.
|
*/

$compiledPath = __DIR__.'/cache/compiled.php';

if (file_exists($compiledPath)) {
    require $compiledPath;
}

/*
|--------------------------------------------------------------------------
| Register The Workbench Loaders
|--------------------------------------------------------------------------
|
| The Laravel workbench provides a convenient place to develop packages
| when working locally. However we will need to load in the Composer
| auto-load files for the packages so that these can be used here.
|
*/
if (is_dir($workbench = __DIR__.'/../workbench'))
{
    Xtwoend\Workbench\Starter::start($workbench);
}

Could it be something about the workbench?

Update: a really horrible fix of returning the Composer.php from 5.1 to vendor/laravel/framework/src/Illuminate/Foundation lets the app function normally but I really need a better solution, one which can be pushed onto production.

6
I'm having the same problem and am also looking for a solution.murze
No, the autoload is not relevant. Those are just comments. The grep says that there is no reference to the Composer class. I honestly think removing the compiled.php file fixed it and you may just need to run composer againandrewtweber

6 Answers

3
votes

The error you get is all about the packages that you use. Since the Composer class' location is changed, it is failed to get located.

From the upgrade notes:

The Illuminate\Foundation\Support\Composer class has been moved to Illuminate\Support\Composer.

Wait for the pull requests to get accepted, for instance the laracasts/generators package, which is included within your composer.json file, is one of the packages that is not yet compatible with Laravel 5.2

https://github.com/laracasts/Laravel-5-Generators-Extended/issues/81

Thus, one of the most commonly used package where this error is occured is the cviebrock/eloquent-sluggable.

https://github.com/cviebrock/eloquent-sluggable/issues/214.

There is nothing you can but wait for the pull requests to get accepted or just edit the vendor files which is not that cool option to do.

2
votes

Try

php artisan optimize --force

If error continues delete vendor/compiled.php and then run the command above This will recreate vendor/compiled.php class.

Command above deletes two files

The bootstrap/compiled.php file. This file is created when you optimize classes. The app/storage/meta/services.json file. This file is created as Laravel tries to optimize the loading of the service providers your application uses.

Source

when I ran clear-compiled it deleted the vendor/compiled.php in my project.

Since You do not have no compiled class at all you may not delete it. This must be why you are having problems. Do not bother clearing compiled classes..

I am also upgrading a huge app from 4.2 to 5.0. problems problems.. :)

1
votes

The bug is being identified and discussed here :

https://github.com/laravel/framework/issues/9678

1
votes

It's probably the SocialiteServiceProvider, maybe others as well.

I had this problem last night when upgrading, a lot of serviceproviders have to upgrade their code to 5.2 as well.

AdamWathan\EloquentOAuthL5\Installation seems to use the Composer class directly, remove this service provider and you can continue the upgrade.

1
votes

Try this:

composer update --no-scripts

It allowed me to see a detailed explanation of why composer update failed. For me I was updating to laravel 5.2 but forgot to also update "laravelcollective/html": "5.1.*" to "laravelcollective/html": "5.2.*".

Found here https://stackoverflow.com/a/36515184/922522

0
votes

Welp, I just made a new laravel app with 5.2 and added all of the code and dependencies in again, seems to be working now.