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 测试实例

Laravel - Eloquent:使用用户发布表从用户那里获取帖子

Laravel 从学徒到工匠

laravel扩展包服务提供者的注册的两种方式

laravel 中的多提供者关系用户表

从内容提供者那里获取联系人,没有重复或无效的联系人,并保存到 Realm