質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

2913閲覧

laravel5のサービスプロバイダについて

tixure55

総合スコア400

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2017/05/06 02:10

編集2017/05/06 07:19

laravel5の下記の記事を読んで、laravel5のサービスプロバイダを学習中なのですが、記事どおりの挙動が実現できません。

Laravelでインスタンスを便利に使いまわす(サービスロケータ)

やりたいこと:
TestControllerの$hoge->sayHello();でこんにちは!と表示させる。

http://localhost:8000/testにアクセスすると、そういう気分じゃないんだ...と表示される。

php artisan -V
Laravel Framework 5.4.21

php

1 1 <?php 2 2 3 3 namespace App\Http\Controllers; 4 4 5 5 use Illuminate\Http\Request; 6 6 use App\Http\Controllers\Controller; 7 7 use App\Hoge; 8 8 9 9 class TestController extends Controller 10 10 { 11 11 public function index(Hoge $hoge) 12 12 { 13 13 // 「そういう気分じゃないんだ...」だそう。 14 14 // つまりインスタンスが新しく生成されていまっている。 15 15 $hoge->sayHello(); 16 16 17 17 // 「こんにちは!」 18 18 //\App::make('hoge')->sayHello(); 19 19 } 20 20 }

php

1//routes/web.php 220 Route::get('test', 'TestController@index');

php

1 1 <?php 2 2 3 3 namespace App\Providers; 4 4 5 5 use Illuminate\Support\ServiceProvider; 6 6 use App\Hoge; 7 7 8 8 class HogeServiceProvider extends ServiceProvider 9 9 { 10 10 /** 11 11 * Bootstrap the application services. 12 12 * 13 13 * @return void 14 14 */ 15 15 public function boot() 16 16 { 17 17 // 18 18 } 19 19 20 20 /** 21 21 * Register the application services. 22 22 * 23 23 * @return void 24 24 */ 25 25 public function register() 26 26 { 27 27 $hoge = new Hoge(); 28 28 $hoge->message = 'こんにちは!'; 29 29 //$this->app->instance('hoge', $hoge); 30 30 $this->app->instance(Hoge::class, $hoge); 31 31 } 32 32 }

php

1//app/Hoge.php 21 <?php 3 2 4 3 namespace App; 5 4 6 5 class Hoge 7 6 { 8 7 public $message = 'そういう気分じゃないんだ...'; 9 8 10 9 public function sayHello() 11 10 { 12 11 echo $this->message; 13 12 } 14 13 }

php

1//config/app.php 2179 App\Providers\HogeServiceProvider::class,

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

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

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

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

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

guest

回答2

0

Route::get('test', function() use ($instance){ $instance->sayHello(); });

Laravel3日目の者ですが、、、、、、試しにこうすると、どうなりますでしょうか?

投稿2017/05/06 08:15

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tixure55

2017/05/06 10:38

切り分けの結果、HogeServiceProviderが読まれていないようです。 $instance->sayHello(); Undefined variable: instanceとなります。
guest

0

ベストアンサー

今はこんにちはを表示したいけどそういう気分じゃないんだ...が表示されてしまうということですかね?

理由は簡単で、config/app.phpのprovidersにHogeServiceProviderを登録していないからだと思います。

投稿2017/05/06 06:14

fagai

総合スコア2158

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

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

tixure55

2017/05/06 07:17

回答ありがとうございます。 質問には、コードを書いておりませんでしたが、config/app.phpにHogeServiceProviderは登録してあります。(質問欄に載せておきます。) その他はどのあたりを疑うべきでしょうか。
fagai

2017/05/06 07:47

まずServiceProviderがちゃんと読めているのかを先に確認する必要がありますね。 \App::make('hoge')->sayHello(); での表示は上手く行ったのでしょうか?
tixure55

2017/05/06 10:35

\App::make('hoge')->sayHello();はClass hoge does not existとなります。 ためしに、HogeServiceProviderを書き換えてみましたが、エラー表示されなかったため、HogeServiceProviderは読まれていないようです。 config/app.phpに書くだけでいいとマニュアルにもあるので、どうすれば読まれるか分からない状態です。
fagai

2017/05/09 09:35

基本的にはファイル名とクラス名が間違えてたりしない限りはconfig/app.phpのprovidersに書くだけで動くはずです。 ファイル名が間違えてるなどありませんか?
tixure55

2017/05/16 09:37

回答ありがとうございます。なんかいじってる間に読めるようになってました。回答遅れてすみませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問