【问题标题】:Attempting to use custom facade results in 'Call to undefined method' on Application::create() in Laravel?尝试在 Laravel 中的 Application::create() 上使用自定义外观会导致“调用未定义的方法”?
【发布时间】:2015-07-26 11:01:43
【问题描述】:

我正在尝试为搜索功能创建自己的自定义外观,但遇到了一点困难:

type: Symfony\Component\Debug\Exception\FatalErrorException
message: Call to undefined method Illuminate\Foundation\Application::create()
file: H:\myproj\vendor\laravel\framework\src\Illuminate\Container\Container.php
line: 165

这个错误是由我的代码命中引起的:

Search::indexObject(); 

我的Search门面设置如下:

搜索服务提供者

<?php
namespace MyProj\Search;

use Illuminate\Support\ServiceProvider;

class SearchServiceProvider extends ServiceProvider {

    public function register() {
        $this->app->bind('search', 'MyProj\Search\Search');
    }

}

搜索外观

<?php
namespace MyProj\Facades;

use Illuminate\Support\Facades\Facade;

class Search extends Facade {
    public static function getFacadeAccessor() {
        return 'search';
    }
}

搜索类

<?php
namespace MyProj\Search;

use Elasticsearch\Client;
use Credential;

class Search {
    private $elasticSearchClient;

    public function __construct() {
        $this->elasticSearchClient = new Client(array(
            'hosts' => [Credential::ElasticSearchHost]
        ));
    }

    public function indexObject($object) {
        // Code 
        return $this->elasticSearchClient->index($params);
    }

    public function get() {
        return $this->$elasticSearchClient;
    }
}

我运行composer dump-autoload没有成功,我的门面和服务提供者在app.php中加载如下:

别名数组

'Search'            => 'MyProj\Facades\Search',

提供者数组

'MyProj\Search\SearchServiceProvider'

过去 30 分钟我一直在调试和搜索此错误,但没有任何修复。这里发生了什么?

编辑:我已在堆栈跟踪中添加,您可以在下面看到。此外,我可以看到 getFacadeAccessor() 被正确调用,但除此之外的任何内容都超出了我的理解范围。

突出显示的框代表最后一次正常操作,Handler.php 上的两个框代表问题顶部错误的格式和输出。

【问题讨论】:

  • 你使用的是什么版本的 Laravel?你能再贴几行堆栈跟踪吗?
  • 我猜你使用的是 Laravel 4.2。你是否对 Laravel 代码进行了任何更改?在第 163 行,我可以看到“$method = ($abstract == $concrete) ? 'build' : 'make';”,所以我看不出如何调用“create()”。
  • 您是否更改了代码?你能再贴几行堆栈跟踪吗?
  • 不,据我所知。我已经在堆栈跟踪中添加了,所以你可以看到发生了什么。如果我能提供更多信息,请告诉我。

标签: php laravel laravel-facade


【解决方案1】:

感谢这是一个旧线程,但是如果您在添加新 Facade 后未清除编译缓存,则会遇到所描述的问题。

你应该运行:

php artisan clear-compiled

【讨论】:

    猜你喜欢
    • 2014-06-24
    • 2023-03-07
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 2019-10-15
    • 1970-01-01
    • 2019-11-02
    相关资源
    最近更新 更多