Laravel 5.4: Non-static method Illuminate\Http\Request::all() should not be called statically のエラー
What?
- Laravel 5.4 で
Non-static method Illuminate\Http\Request::all() should not be called statically
のエラーがでる
Why?
- Request ファサードまで、リクエストが届いていない
config/app.php
に以下のエイリアスが書いてあるので、Request
を直接呼ぶ'Request' => Illuminate\Support\Facades\Request::class,
Solution
- 以下に変更
use Illuminate\Http\Request;
↓
use Request;
参照
Laravel 5.4: Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Application' のエラー
What?
Fatal error: Uncaught Error: Class 'Illuminate\Foundation\Application'
- のエラーがでる
Why?
- Composerがおかしくなってて、ライブラリが見つけられない
How to?
- ライブラリの Install しなおし & autoload の dump ファイルの更新
$ composer install $ composer dump-autoload
Laravel 5.4: Class 'Form' not found エラーが出る
What?
illuminate/html
を使って、フォームを作ろうとすると、Class 'Form' not found (View: /home/vagrant/Code/laravel/resources/views/articles/create.blade.php)
エラーが出る
Why?
- Laravel 5.2 から仕様がちょっと変わった
illuminate/html
ではなく、laravelcollective/html
を使う
Collective\Html\HtmlServiceProvider::class,
のHTML
を大文字にしてた。。。
How to?
composer require laravelcollective/html
する
$ composer require laravelcollective/html Using version ^5.4 for laravelcollective/html ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Nothing to install or update Generating autoload files > Illuminate\Foundation\ComposerScripts::postUpdate > php artisan optimize Generating optimized class loader The compiled services file has been removed. laravel vagrant master *%$ composer dump-autoload -o Generating optimized autoload files
config/app.php
'providers' => [ ... Collective\HTML\HtmlServiceProvider::class, ... ], ... 'aliases' => [ ... 'Form' => Collective\Html\FormFacade::class, 'Html' => Collective\Html\HtmlFacade::class, ... ],
- ん?できない。
- エラーが変わった
FatalThrowableError in ProviderRepository.php line 201: Class 'Collective\HTML\HtmlServiceProvider' not found
$ ls -la vendor/laravelcollective/html/src/HtmlServiceProvider.php -rw-r--r-- 1 vagrant vagrant 1489 Mar 9 15:10 vendor/laravelcollective/html/src/HtmlServiceProvider.php $ composer info | grep laravel laravel/framework v5.4.15 The Laravel Framework. laravel/tinker v1.0.0 Powerful REPL for the Laravel framework. laravelcollective/html v5.4.1 HTML and Form Builders for the Laravel Framework $ grep -r HtmlServiceProvider vendor/composer/ vendor/composer/autoload_classmap.php: 'Collective\\Html\\HtmlServiceProvider' => $vendorDir . '/laravelcollective/html/src/HtmlServiceProvider.php', vendor/composer/autoload_static.php: 'Collective\\Html\\HtmlServiceProvider' => __DIR__ . '/..' . '/laravelcollective/html/src/HtmlServiceProvider.php',
- 3日悩んだ結果。
'providers' => [ ... Collective\Html\HtmlServiceProvider::class, ... ],
- 答え:
HTML
じゃなくてHtml
な。。。- ディレクトリ名なので大文字小文字が厳密に判断される
- composerを使って、オートロードしているので、以下と一緒じゃなきゃだめ
- ディレクトリ名なので大文字小文字が厳密に判断される
$ less vendor/composer/installed.json "autoload": { "psr-4": { "Collective\\Html\\": "src/" },
次、困ったときは順番にこれをやる
- Issue composer require “laravelcollective/html”:“^5.3.0”.
- Verify that the vendor/laravelcollective/html directory exists.
- Verify that your composer.json file has been updated and there’s an entry for laravelcollective/html package in your dependencies (require block).
- Add Collective\Html\HtmlServiceProvider::class to your providers array of config/app.php.
- Add ‘Form’ => Collective\Html\FormFacade::class and ‘Html’ => Collective\Html\HtmlFacade::class to your aliases array.
- Confirm that the API exists: Issue a php artisan tinker command and try playing with Form:: APIs. See if throws any errors.
知見
- ハマったら、キャッシュクリアしたり、再インストールしたりする(今回あんま関係なかったけど)
$ composer dump-autoload $ composer update $ composer clear-cache $ php artisan route:clear $ php artisan cache:clear $ php artisan config:clear $ composer remove laravelcollective/html $ composer require laravelcollective/html
参考
Dependency "laravel/framework" is also a root requirement, but is not explicitly whitelisted. Ignoring.の意味
What?
Dependency "laravel/framework" is also a root requirement, but is not explicitly whitelisted. Ignoring.
と表示されて意味がわからん
$ composer remove laravelcollective/html Dependency "laravel/framework" is also a root requirement, but is not explicitly whitelisted. Ignoring. Dependency "laravel/framework" is also a root requirement, but is not explicitly whitelisted. Ignoring. Dependency "laravel/framework" is also a root requirement, but is not explicitly whitelisted. Ignoring. Dependency "laravel/framework" is also a root requirement, but is not explicitly whitelisted. Ignoring. Dependency "laravel/framework" is also a root requirement, but is not explicitly whitelisted. Ignoring. Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 0 installs, 0 updates, 1 removal - Removing laravelcollective/html (v5.4.1) Writing lock file Generating autoload files > Illuminate\Foundation\ComposerScripts::postUpdate > php artisan optimize [Symfony\Component\Debug\Exception\FatalThrowableError] Class 'Collective\HTML\HtmlServiceProvider' not found Script php artisan optimize handling the post-update-cmd event returned with error code 1 Removal failed, reverting ./composer.json to its original content.
直訳: Dependency “laravel/framework” is also a root requirement, but is not explicitly whitelisted. Ignoring.
- 依存関係にある"laravel/framework"はrootの必須項目です。しかし、明示的にホワイトリストに入っていません。無視します。
-
- Composerではパッケージ更新時に引数として与えられる依存パッケージリストをホワイトリストと呼んでいる
- e.g.
$ composer update hoge fuga piyo
つまり、今回指定されたのは、
laravelcollective/html
だけで、明示的にlaravel/framework
が引数として指定されたわけではないので、laravel/framework
は消さないよ。ということです。
composer removeとかupdateとかできない
What?
Class hogehoge not found
と表示されて、composerでライブラリ操作ができなくなる
$ composer remove illuminate/html Dependency "laravel/framework" is also a root requirement, but is not explicitly whitelisted. Ignoring. Dependency "laravel/framework" is also a root requirement, but is not explicitly whitelisted. Ignoring. Dependency "laravel/framework" is also a root requirement, but is not explicitly whitelisted. Ignoring. Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 0 installs, 0 updates, 1 removal - Removing illuminate/html (v5.0.0) Writing lock file Generating autoload files > Illuminate\Foundation\ComposerScripts::postUpdate > php artisan optimize [Symfony\Component\Debug\Exception\FatalThrowableError] Class 'Collective\HTML\HtmlServiceProvider' not found Script php artisan optimize handling the post-update-cmd event returned with error code 1 Removal failed, reverting ./composer.json to its original content.
How to
config/app.php
のproviders
に使っていないものが書いてあるので、消す
'providers' => [ ... // Collective\HTML\HtmlServiceProvider::class, ... ],
- おっけー
$ composer remove illuminate/html Package "illuminate/html" listed for update is not installed. Ignoring. Loading composer repositories with package information Updating dependencies (including require-dev) Nothing to install or update Generating autoload files > Illuminate\Foundation\ComposerScripts::postUpdate > php artisan optimize Generating optimized class loader The compiled services file has been removed.
$ composer require laravelcollective/html Using version ^5.4 for laravelcollective/html ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Installing laravelcollective/html (v5.4.1) Downloading: 100% Writing lock file Generating autoload files > Illuminate\Foundation\ComposerScripts::postUpdate > php artisan optimize Generating optimized class loader The compiled services file has been removed.
How to その2
php artisan optimize
でコケてるので、--no-scripts
オプションで実行後スクリプトを実行させない
$ composer remove --no-scripts laravelcollective/html Package "laravelcollective/html" listed for update is not installed. Ignoring. Loading composer repositories with package information Updating dependencies (including require-dev) Nothing to install or update Generating autoload files
$ composer require --no-scripts laravelcollective/html Using version ^5.4 for laravelcollective/html ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Nothing to install or update Generating autoload files
Homestead をリロードしようとしたらエラーになる
What?
- カフェに行ってPCを開いて、起動しっぱなしのHomesteadサーバにアクセスしたらエラー
- vagrantからリロードしても以下のエラーが出て立ち上がらない
$ vagrant reload ==> homestead-7: Attempting graceful shutdown of VM... ==> homestead-7: Checking if box 'laravel/homestead' is up to date... ==> homestead-7: Clearing any previously set forwarded ports... ==> homestead-7: Clearing any previously set network interfaces... The specified host network collides with a non-hostonly network! This will cause your specified IP to be inaccessible. Please change the IP or name of your host only network so that it no longer matches that of a bridged or non-hostonly network.
Why?
英語を読もう(雑訳)
- ホストオンリーではないネットワークで、特定のホストネットワークが衝突してます
- これは、あなたが設定したIPにアクセス出来ないということです
- そのホストはブリッジされているもしくはホストオンリーではないネットワークにおいて、もうマッチしていないので、あなたのホストオンリーネットワークのIPか名前を変えてください。
つまりは、外で作業を初めて、今のIP(homesteadのデフォルトIP: 192.168.10.10)が他の人と被ったから
Solution
.homestead/Homestead.yaml
ip: "192.168.10.10"
を
ip: "192.168.10.11"
とかに変更する。
- /etc/hosts も変更することを忘れずに