19849


簡単なサンプルソースを参考に画面出力をしようと思ってますが、  
下記のエラーがでているところです。

> Argument 1 passed to {closure}() must be an instance of
> App\Services\Messenger\Messenger, string given

クロージャの第一引数がオブジェクト型ではないということで、  
おこられているようなのですが、  
どこを修正すればよいかご教授願えないでしょうか。

■コントローラー

●Messenger.php

[code]

    <?php // app/Services/Messenger/Messenger.php
    
    namespace app\Services\Messenger;
    
    interface Messenger {
        public function send($message);
    }
    
[/code]

●MailMessenger.php

[code]

    <?php  // app/Services/Messenger/MailMessenger.php
    
    namespace app\Services\Messenger;
    
    class MailMessenger implements Messenger {
    
        public function send($message) {
            // ここで、メールでメッセージを送る
    
            return "メールで $message を送りました。";
        }
    }
    
[/code]

●BikeMessenger.php

[code]

    <?php  // app/Services/Messenger/BikeMessenger.php
    
    namespace app\Services\Messenger;
    
    class BikeMessenger implements Messenger {
    
        public function send($message) {
            // ここで、バイクに乗ってメッセージを届ける
    
            return "バイク便で $message を届けました。";
        }
    }
    
[/code]

■ルーター

[code]

    // app/Http/routes.php
    
    use app\Services\Messenger\Messenger;
    
    Route::get('send_message/{message}', function(Messenger $messenger, $message){
        return $messenger->send($message);
    });
    
[/code]

以上、よろしくお願いいたします。


CC BY-SA 3.0
2015-12-10T05:55:33.360
19840
2015-12-10T09:37:32.373
2015-12-10T09:18:01.993
8000
13426
question
laravel
インターフェースを用いた簡単な画面出力(Laravel4.2)


以下のサイトを参考にされたのだと思いますが・・・。

[サービスプロバイダーの作成 |
ララ帳](https://laravel10.wordpress.com/2015/04/23/%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%83%97%E3%83%AD%E3%83%90%E3%82%A4%E3%83%80%E3%83%BC%E3%81%AE%E4%BD%9C%E6%88%90/)

このサイトの記事は **Laravel 5** を対象にしています。

あなたが試そうとしたコードは `function(Messenger $messenger, $message)`
の第一引数に適切なインスタンスが挿入されることを期待していますが、これは Laravel 5.0
で導入されたメソッドインジェクションという機能によるものです。 Laravel 4.2 ではコンストラクタの引数にしか自動挿入は行われません。

参考 [Laravel 5 はこう変わる！ メソッドインジェクションとFormRequest編 -
localdisk](http://localdisk.hatenablog.com/entry/2014/10/01/173347)


CC BY-SA 3.0
2015-12-10T09:37:32.373
19849
2015-12-10T09:37:32.373
8000
19840
answer