Laravel 4将Controller $传递给ServiceProvider

时间:2014-05-14 17:08:01

标签: php laravel-4 this service-provider

我想将$this从我的控制器传递到我的服务提供商,以便我可以将它与我的自定义类一起使用。这样,我可以参考我的控制器并输出成功。

控制器

function Foo(){

    //$this is defined
    MyFacade::Bar($input);

}

function success(){

     return var_dump('Succes!');

}

服务提供商

<?php namespace App\Libraries\Extensions\Filesystem;

use Illuminate\Support\ServiceProvider as  IlluminateServiceProvider;
use App\Libraries\Extensions\Filesystem\Filesystem;

class FilesystemServiceProvider extends IlluminateServiceProvider {

   public function register()
        { 
            $this->app->bind('files', function(){

               return new Filesystem($this);

            });    
    }
}

自定义类

<?php namespace App\Libraries\Extensions\Filesystem;

use \Illuminate\Filesystem\Filesystem as IlluminateFilesystem;

class Filesystem extends IlluminateFilesystem {

protected $listener;

    public function __construct($listener)
    {

        $this->listener = $listener;

    }

   function Bar($input){
     //Some code
     return $this->listener->Success();
   }

使用此代码我得到Call to undefined method App\Libraries\Extensions\Filesystem\FilesystemServiceProvider::Success()

我相信我的Service Provider $this代替了Controller $this

如何将我的控制器$this传递给我的服务提供商,以便我可以致电MyFacade::Bar($input)

1 个答案:

答案 0 :(得分:1)

  

我想将$ this从我的Controller传递给我的服务提供商,所以我   可以在我的自定义类中使用它。那样,我可以参考我的   控制器并输出成功。

这是一个糟糕的主意,无论如何你都会遇到麻烦。

您的Filesystem类应该不了解您的控制器类。传入$ this并尝试让File执行控制器的工作不是这样做的。它应该只是做'文件'的东西,然后返回一个适当的响应。

<强>控制器

function Foo(){

    if (MyFacade::Bar($input))
    { 
        // Success
    }
    else
    {
        // Fail
    }

}

自定义类

function Bar($input){
     //Some code
     return true; // or false
   }