我想将$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)
?
答案 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
}