【问题标题】:"Unresolvable dependency resolving" Error, Laravel Service Provider“无法解析的依赖解析”错误,Laravel 服务提供者
【发布时间】:2015-11-06 02:30:55
【问题描述】:

我正在尝试构建自定义服务提供程序包,但是遇到了以下错误。有人有这方面的经验吗?

Unresolvable dependency resolving [Parameter #0 [ <required> $app ]] in class Illuminate\Support\ServiceProvider

包文件夹结构:

[root]
....packages/
........mbarwick83/
............previewr/
................src/
....................PreviewrServiceProvider.php
....................Previewr.php
................composer.json

配置/app.php:

Mbarwick83\Previewr\PreviewrServiceProvider::class

服务提供者:

<?php

namespace Mbarwick83\Previewr;

use Illuminate\Support\ServiceProvider;

class PreviewrServiceProvider extends ServiceProvider
{
    /**
     * Indicates if loading of the provider is deferred.
     *
     * @var bool
     */
    protected $defer = false;

    /**
     * Perform post-registration booting of services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register any package services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind('Mbarwick83\Previewr\Previewr',function($app){
            return new Previewr($app);
        });
    }
}

Previewr.php(类):

<?php

namespace Mbarwick83\Previewr;

class Previewr
{
    /**
     * Create a new Previewr Instance
     */
    public function __construct()
    {
        //
    }

    /**
     * Friendly welcome
     *
     * @param string $phrase Phrase to return
     *
     * @return string Returns the phrase passed in
     */
    public function something($phrase)
    {
        return $phrase;
    }
}

Controller/view:

use Mbarwick83\Previewr\PreviewrServiceProvider as Previewr;

public function index(Previewr $previewr)
{
    echo $previewr->something('Hello, League!');
}

composer.json:

"autoload": {
        "psr-4": {
            "Mbarwick83\\Previewr\\": "packages/Mbarwick83/Previewr/src"
        }
    },

【问题讨论】:

  • 你试过使用composer dump-autoloadcomposer update吗?
  • @aldrin27 是的,我做到了。

标签: php laravel laravel-5 package laravel-5.1


【解决方案1】:

在你的控制器中,你确定要注入你的服务提供者吗?

use Mbarwick83\Previewr\PreviewrServiceProvider as Previewr;

您可能想改用它:

use Mbarwick83\Previewr\Previewr;

【讨论】:

  • 好的,解决了!问题 - 这有什么作用(对不起,宽泛的问题)......但是这是在做什么?
  • 另外,如果我打算使用facade 进行注入,我会使用use Mbarwick83\Previewr\Facades\Previewr; 来代替(当然,假设我创建了外观类。
  • 你不注入外墙。如果您使用的是注入,那么外墙毫无意义。
  • Facades 通常被建议用于在其工作中具有“复杂类”的服务。因此,立面将隐藏复杂性并以更简单的形式向客户展示功能。否则,外观本身就会变得更加复杂。
猜你喜欢
  • 2016-03-21
  • 2019-01-24
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
  • 2019-03-23
  • 2015-12-25
相关资源
最近更新 更多