Laravel 从注册提供者那里获取帮助类
Posted
技术标签:
【中文标题】Laravel 从注册提供者那里获取帮助类【英文标题】:Laravel get helper class from register provider 【发布时间】:2016-01-06 10:08:35 【问题描述】:我正在尝试像在 symfony 中那样做一些服务,我正在遵循一些教程并执行以下步骤: 1.创建一个新的服务提供者:
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class HelperServiceProvider extends ServiceProvider
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
//
/**
* Register the application services.
*
* @return void
*/
public function register()
$this->app->bind('mailer.helper', function ($app)
return new \App\Helpers\MailerHelper($app->make('\Illuminate\Mail\Mailer'));
);
我正在创建我的自定义助手:
命名空间 App\Helpers;
类 MailerHelper 实现 \Illuminate\Contracts\Bus\SelfHandling
/** @var \Illuminate\Mail\Mailer $mailer */
protected $mailer;
public function __construct(\Illuminate\Mail\Mailer $mailer)
$this->mailer=$mailer;
public function sendFromContact(array $date)
var_dump($this->mailer);die;
我在 config/app.php 中注册它:
'providers' => [
...
\App\Providers\HelperServiceProvider::class
现在最大的问题是如何在我的控制器中调用它。
例如,在 symfony 中,如果声明一个服务他有一个名字,而在控制器中你可以这样做:$this->get('your.service')
但在 Laravel 中如何做到这一点?调用我的服务,然后调用我的函数。
【问题讨论】:
【参考方案1】:你可以使用 Laravel 的全局 app
助手:
app('mailer.helper')->sendFromContact(...);
更好的选择可能是放弃在容器中注册任何内容(这也意味着您可以完全摆脱服务提供者),而是将您的类注入到控制器方法中:
public function postContact(\App\Helpers\MailerHelper $helper)
$helper->sendFromContact(...);
Laravel 的容器将解析您的 MailerHelper
类并自动将 Mailer
的实例注入其中。
【讨论】:
谢谢你的帮助,我会记住这一点,但这是一个大项目,需要很多助手,很难阅读一个有很多参数的函数。【参考方案2】:有很多方法,但你可以试试这个:
$helper = app('mailer.helper');
或者直接调用方法:
app('mailer.helper')->doSomething();
相当于:
$helper = \App::make('mailer.helper');
$helper->callSomeMethod();
你也可以这样使用:
app('App\Helpers\MailerHelper')->callAction();
【讨论】:
谢谢,我看到了这项工作,但现在出错并说Class 'App\Helpers\MailerHelper' not found
但我看到一切都很好,这里有什么问题?
如果不在psr-4
中,您可能需要从终端执行composer dump
。以上是关于Laravel 从注册提供者那里获取帮助类的主要内容,如果未能解决你的问题,请参考以下文章
Laravel创建 Service Provider 测试实例