Я не понимаю смысла Facade, если вы собираетесь внедрить свой класс в контроллер как часть IoC.
Скажем, у меня есть нестандартный фасад под названием PostHelper
. У меня есть 2 функции:
class PostHelper
{
public function __construct() {}
public function all() {}
public function get($id) {}
}
Чтобы использовать этот помощник, с фасадами и без них (скажем, в вашем контроллере)
// Without Facade
$helper = new PostHelper();
return $helper->all();
// With Facade
return PostHelper::all();
Но это плохая практика, поскольку я не могу издеваться над PostHelper
при его тестировании. Вместо этого я бы передал его конструктору своего контроллера:
class HomeController extends BaseController
{
private $PostHelper;
public function __construct(PostHelper $helper)
{
$this->PostHelper = $helper;
}
public function index()
{
return $this->PostHelper->all();
}
}
В конструкторе я мог бы просто использовать $this->PostHelper = new $helper()
, если бы не создал фасад. В любом случае, я никогда не использую статичность фасада при использовании DI.
Так в чем же смысл использования фасада?