はじめに
お久しぶりです。
今回はStripeを実装しようとしたところ、バージョンが古いからアップデートしてくれ的なエラーメッセージが出たので、
Laravel5.6から5.8にバージョンをあげたときにやったことをメモ程度に書き残します。
以下メモ
composer.jsonを修正
laravel/frameworkを5.7に修正しcompoesr updateを実行。
エラーがなかったら5.8に修正しさらにcomposer updateを実行。
5.8にかえた段階でなんかエラーがたくさん発生
#0 プロジェクト名/laravel/framework/src/Illuminate/Container/Container.php(785): NunoMaduro\Collision\Adapters\Laravel\CollisionServiceProvider->NunoMaduro\Collision\Adapters\Laravel\{closure}(Object(Illuminate\Foundation\Application), Array)
#1 プロジェクト名/vendor/laravel/framework/src/Illuminate/Container/Container.php(667): Illuminate\Container\Container->build(Object(Closure))
#2 プロジェクト名/vendor/laravel/framework/src/Illuminate/Container/Container.php(615): Illuminate\Container\Container->resolve('Illuminate\\Cont...', Array)
#3 プロジェクト名/vendor/nunomaduro/collision/src/Adapters/Laravel/CollisionServiceProvider.php on line 44
とりあえずなんのことだか、さっぱりでしたが#3にヒントっぽいのがありましたので、そこのディレクトリまで移動して中身を確認。
多分ここでエラーが起きてます。。。
エラーの原因はわかったけど、修正の仕方がわからないので、適当にlaravel5.8のプロジェクトを作成しました。
CollisionServiceProvider.phpを修正しました。
CollisionServiceProvider--laravel5.6.php
<?php/**
* This file is part of Collision.
*
* (c) Nuno Maduro <enunomaduro@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/namespaceNunoMaduro\Collision\Adapters\Laravel;useNunoMaduro\Collision\Provider;useIlluminate\Support\ServiceProvider;useNunoMaduro\Collision\Adapters\Phpunit\Listener;useNunoMaduro\Collision\Contracts\ProviderasProviderContract;useIlluminate\Contracts\Debug\ExceptionHandlerasExceptionHandlerContract;useNunoMaduro\Collision\Contracts\Adapters\Phpunit\ListenerasListenerContract;/**
* This is an Collision Laravel Adapter Service Provider implementation.
*
* Registers the Error Handler on Laravel.
*
* @author Nuno Maduro <enunomaduro@gmail.com>
*/classCollisionServiceProviderextendsServiceProvider{/**
* {@inheritdoc}
*/publicfunctionregister(){if($this->app->runningInConsole()&&!$this->app->runningUnitTests()){$this->app->singleton(ListenerContract::class,Listener::class);$this->app->bind(ProviderContract::class,Provider::class);$appExceptionHandler=$this->app->make(ExceptionHandlerContract::class);$this->app->singleton(ExceptionHandlerContract::class,function($app)use($appExceptionHandler){returnnewExceptionHandler($app,$appExceptionHandler);});}}}?>
ExceptionHandler--laravel5.6.php
<?php/**
* This file is part of Collision.
*
* (c) Nuno Maduro <enunomaduro@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/namespaceNunoMaduro\Collision\Adapters\Laravel;useException;useIlluminate\Contracts\Foundation\Application;useNunoMaduro\Collision\Contracts\ProviderasProviderContract;useIlluminate\Contracts\Debug\ExceptionHandlerasExceptionHandlerContract;useSymfony\Component\Console\Exception\ExceptionInterfaceasSymfonyConsoleExceptionInterface;/**
* This is an Collision Laravel Adapter ExceptionHandler implementation.
*
* Registers the Error Handler on Laravel.
*
* @author Nuno Maduro <enunomaduro@gmail.com>
*/classExceptionHandlerimplementsExceptionHandlerContract{/**
* Holds an instance of the application exception handler.
*
* @var \Illuminate\Contracts\Debug\ExceptionHandler
*/protected$appExceptionHandler;/**
* Holds an instance of the application.
*
* @var \Illuminate\Contracts\Foundation\Application
*/protected$app;/**
* Creates a new instance of the ExceptionHandler.
*
* @param \Illuminate\Contracts\Foundation\Application $app
* @param \Illuminate\Contracts\Debug\ExceptionHandler $appExceptionHandler
*/publicfunction__construct(Application$app,ExceptionHandlerContract$appExceptionHandler){$this->app=$app;$this->appExceptionHandler=$appExceptionHandler;}/**
* {@inheritdoc}
*/publicfunctionreport(Exception$e){$this->appExceptionHandler->report($e);}/**
* {@inheritdoc}
*/publicfunctionrender($request,Exception$e){return$this->appExceptionHandler->render($request,$e);}/**
* {@inheritdoc}
*/publicfunctionrenderForConsole($output,Exception$e){if($einstanceofSymfonyConsoleExceptionInterface){$this->appExceptionHandler->renderForConsole($output,$e);}else{$handler=$this->app->make(ProviderContract::class)->register()->getHandler()->setOutput($output);$handler->setInspector((newInspector($e)));$handler->handle();}}}
CollisionServiceProvider--laravel5.6.php
<?php/**
* This file is part of Collision.
*
* (c) Nuno Maduro <enunomaduro@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/namespaceNunoMaduro\Collision\Adapters\Laravel;useNunoMaduro\Collision\Provider;useIlluminate\Support\ServiceProvider;useNunoMaduro\Collision\Adapters\Phpunit\Listener;useNunoMaduro\Collision\Contracts\ProviderasProviderContract;useIlluminate\Contracts\Debug\ExceptionHandlerasExceptionHandlerContract;useNunoMaduro\Collision\Contracts\Adapters\Phpunit\ListenerasListenerContract;/**
* This is an Collision Laravel Adapter Service Provider implementation.
*
* Registers the Error Handler on Laravel.
*
* @author Nuno Maduro <enunomaduro@gmail.com>
*/classCollisionServiceProviderextendsServiceProvider{/**
*
* {@inheritdoc}
*/protected$defer=true;/**
*
* {@inheritdoc}
*/publicfunctionregister(){if($this->app->runningInConsole()&&!$this->app->runningUnitTests()){$this->app->singleton(ListenerContract::class,Listener::class);$this->app->bind(ProviderContract::class,Provider::class);$appExceptionHandler=$this->app->make(ExceptionHandlerContract::class);$this->app->singleton(ExceptionHandlerContract::class,function($app)use($appExceptionHandler){returnnewExceptionHandler($app,$appExceptionHandler);});}}/**
*
* {@inheritdoc}
*/publicfunctionprovides(){return[ProviderContract::class];}}
ExceptionHandler--laravel5.8.php
<?php/**
* This file is part of Collision.
*
* (c) Nuno Maduro <enunomaduro@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/namespaceNunoMaduro\Collision\Adapters\Laravel;useException;useIlluminate\Contracts\Foundation\Application;useNunoMaduro\Collision\Contracts\ProviderasProviderContract;useIlluminate\Contracts\Debug\ExceptionHandlerasExceptionHandlerContract;useSymfony\Component\Console\Exception\ExceptionInterfaceasSymfonyConsoleExceptionInterface;/**
* This is an Collision Laravel Adapter ExceptionHandler implementation.
*
* Registers the Error Handler on Laravel.
*
* @author Nuno Maduro <enunomaduro@gmail.com>
*/classExceptionHandlerimplementsExceptionHandlerContract{/**
* Holds an instance of the application exception handler.
*
* @var \Illuminate\Contracts\Debug\ExceptionHandler
*/protected$appExceptionHandler;/**
* Holds an instance of the application.
*
* @var \Illuminate\Contracts\Foundation\Application
*/protected$app;/**
* Creates a new instance of the ExceptionHandler.
*
* @param \Illuminate\Contracts\Foundation\Application $app
* @param \Illuminate\Contracts\Debug\ExceptionHandler $appExceptionHandler
*/publicfunction__construct(Application$app,ExceptionHandlerContract$appExceptionHandler){$this->app=$app;$this->appExceptionHandler=$appExceptionHandler;}/**
*
* {@inheritdoc}
*/publicfunctionreport(Exception$e){$this->appExceptionHandler->report($e);}/**
*
* {@inheritdoc}
*/publicfunctionrender($request,Exception$e){return$this->appExceptionHandler->render($request,$e);}/**
*
* {@inheritdoc}
*/publicfunctionrenderForConsole($output,Exception$e){if($einstanceofSymfonyConsoleExceptionInterface){$this->appExceptionHandler->renderForConsole($output,$e);}else{$handler=$this->app->make(ProviderContract::class)->register()->getHandler()->setOutput($output);$handler->setInspector((newInspector($e)));$handler->handle();}}/**
* Determine if the exception should be reported.
*
* @param \Exception $e
* @return bool
*/publicfunctionshouldReport(Exception$e){return$this->appExceptionHandler->shouldReport($e);}}
とりあえずこの二つのファイルを修正しました。
php artisan を実行してみましょう。
動くはずです。
ざっと書きましたが上記の流れで自分はartisanが実行できるようになりました!
記事が少なくて大変でした。。。