🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

30298閲覧

php intelephense(VScode)でLaravelのコードがUndefined typeになる

mono_chrome18

総合スコア14

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

0クリップ

投稿2020/12/21 02:11

イメージ説明

VScodeにphp intelephenseというプラグインを入れてLaravelでアプリ開発を行っています。
こちらのプラグインはPHPのコード解析や引数や戻り値を教えてくれるなど便利なものなのですが、LaravelでデフォルトであるようなRouteやAuthにUndefined typeがついてしまいエラーのように表示されてしまいます。
特別問題があるわけではないのですが、誤っていないものにエラーのように表示されてしまうのが気持ち悪いです。

なぜこのようになってしまうのかご存じなかたいらっしゃいましたらご教示いただけますと幸いです。

juner👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

似たような現象が起きていて解決している記事を見つけました。
VSCode拡張機能Intelephenseの更新によるUndefined type 'Route'(他クラス)のエラー - Qiita

投稿2020/12/21 04:36

kai0310

総合スコア2076

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mono_chrome18

2020/12/22 06:17

おお、まさにですね! 私のググり力が弱かったです。 ありがとうございます!
guest

0

ベストアンサー

Facadeの悪いところ出てますね。
kai0310さんの回答の記事のようにlaravelに沿って、linterの方を粛清する方法もありますが、宣言すればいいのでFacadeを使わずに実体を呼んでしまうことで解決することもできます。

web.php

php

1use Illuminate\Support\Facades\Route; 2use Illuminate\Support\Facades\Auth; 3 4Route::get()

投稿2020/12/21 07:28

zushi0905

総合スコア683

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mono_chrome18

2020/12/22 06:26

なるほど、useで宣言してないからエラー出ているんですか、、 そうすると、なぜ宣言していなくてもFacadeって使えるのでしょう、、 useによる宣言って必須じゃないのかしら、、 staticメソッドだからとか? そもそもfacadeって、、 おそらくphp自体の理解が乏しいので疑問に感じるのだと思うのですが、参考になるリンクでもよいので何かご教示いただけると幸いです。 完全に理解はできていませんが宣言したら確かにエラーは無くなったので大変ありがたい情報でした。
zushi0905

2020/12/22 09:10 編集

laravelは始めにappクラスを作ってそこにFacadeを始めとした色々なものを登録します。それがapp.phpです。 Facadeを使おうとしたタイミングでappにインスタンスが存在していればそれを取ってきて実行する。簡単にいうとこんなところです。 facadeはlaravelのいいところとも言えるし、悪いところとも言えます。利便性を求めた故に設計を簡単に破綻させます。実装の説明は非常に難しいので、"facade DIコンテナ"とかで調べて色々な記事を参考にして分からないところを適宜質問する方がいいと思います。 linterが怒るし、定義ジャンプ効かないし、singletonかと思ったら__callStatic内で結局インスタンス毎回生成してるしで私は使わないようになりました。使うなら用法を守れば便利なものだと思います!
mono_chrome18

2020/12/23 02:28

大変丁寧で参考になるご回答ありがとうございました。 「linterが怒るし、定義ジャンプ効かないし…」 cakePHPから移ってきた勢だったので、まさにこの部分で混乱していました。 調べてみるとfacadeを使わないで実装するエントリなどもあったので、facadeはzushi0905さんのおっしゃる通りいいところでもあり悪いところでもあるのですね。 設計を破綻させないように気をつけて使いながら慣れたいと思います! そして、そのうちどのように実装して実現しているの理解できるように深掘りしてみたいと思います! 根本的な原因をご回答いただけてすっきりしました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問