2017-08-29 4 views
-1

これはContactsControllerです:なぜコントローラ内部でモデルを使用できないのですか?

<?php 

namespace App\Http\Controllers; 

use App\Contact; 
use Illuminate\Http\Request; 

class ContactsController extends Controller 
{ 
    . 
    . 
    . 
    public function edit($id) 
    { 
     $contact = Contact::find($id); 
     print_r(App\Group::find(1)); 
     return view('contacts.edit'); 
    } 
    . 
    . 
    . 
} 

Contact.phpGroup.phpモデルはすでにappフォルダに作成されます。問題は.blade.phpファイル内にApp\Group::find(1)を使用できますが、コントローラのメソッドでは使用できません。私のコードは次のようなエラーに同じエラーが報告さ

クラス 'のApp \のHttp \コントローラ\グループ' 私も試してみましたprint_r(Group::find(1));

見つからないを報告します。

おかげ

+2

このコントローラーにモデルを追加します。泣き声の前にちょうど を書くApp \ Contact;あなたのモデルがアプリケーションフォルダにある場合は、あなたのモデルはどこに他のパスを与えますか? –

+0

@KuldeepMishra私はこの作品を知っていますが、なぜ '.blade.php'ファイルで' use App \ Group'を追加する必要はありませんか? – Drupalist

+0

ビュー内のモデルにアクセスする必要はありません。あなたのコントローラは必要なデータをビューに渡す必要があります。 –

答えて

1

は、クラスをインポートするファイルの先頭にuse App\Group;を追加します。

+0

私はこの作品を知っていますが、なぜ '.blade.php'ファイルで' use App \ Group'を追加する必要はありませんか? – Drupalist

+0

'.blade'ファイルはグローバル名前空間にビルドされているためです。だからあなたのビューで文字通り 'App \ Group'を参照するとき、それはモデルを見つけることができます。しかし、あなたがコントローラにいて、モデルを参照しているときには、現在の名前空間に相対的にそれを探します - 文字通り 'App \ Http \ Controllers \ Group'。したがって、2つのオプションがあります。先頭に 'use'を追加してPHPに別の名前空間を使用するように指示するか、' \ App \ Group'のように接頭辞付きのスラッシュを付けてPHPにルート名前空間から取得させるように指示します。 – Dwight

1

線の下に追加します。使用後のApp \連絡先

使用のApp \グループ

+0

私はこの作品を知っていますが、なぜ '.blade.php'ファイルで' use App \ Group'を追加する必要はありませんか? – Drupalist

1

use Namespace\Model;でモデルをインポートすることができます。ファイルの上にインポートする必要がないように、完全修飾ネームスペースを使用することもできます。ネームスペースの前にバックスラッシュを追加することで、完全修飾ネームスペースを使用できます。ブレードテンプレートでこれを行うことができます。

{{ \Namespace\Model::someStaticFunction() }} 

あなたはそれを行うことができますし、ファサードを混在させることもできます。

関連する問題