Php Laravel Facade类未加载根类,而是返回未找到的方法
我试图让我的Facade类工作,但是看起来Laravel是在我的Facade类上调用该方法,而不是在我的根类上调用它。所以我得到了方法未定义的错误。当我直接从绑定(App::make('feed')->addArticle();)创建提要类时,它可以工作。所以我觉得我的外表有点不对劲。有什么想法吗?先谢谢你 控制器Php Laravel Facade类未加载根类,而是返回未找到的方法,php,laravel,facade,Php,Laravel,Facade,我试图让我的Facade类工作,但是看起来Laravel是在我的Facade类上调用该方法,而不是在我的根类上调用它。所以我得到了方法未定义的错误。当我直接从绑定(App::make('feed')->addArticle();)创建提要类时,它可以工作。所以我觉得我的外表有点不对劲。有什么想法吗?先谢谢你 控制器 class RssController extends BaseController { public function getArticles() {
class RssController extends BaseController
{
public function getArticles() {
Feed::addArticle();
}
}
服务提供者
use Illuminate\Support\ServiceProvider;
class FeedServiceProvider extends ServiceProvider {
public function register()
{
$this->app->bind('feed', function()
{
return new Feed;
});
}
}
门面类
use Illuminate\Support\Facades\Facade;
class FeedFacade extends Facade {
protected static function getFacadeAccessor()
{
return 'feed';
}
}
根类
class Feed {
//vars
public function __construct()
{
}
public function make() {
return new Feed();
}
public function addArticle() {
return '@addArticle';
}
问题似乎是您希望您的Laravel Facade(
Feed::
)和服务提供商的实现类(class Feed
)具有相同的名称。Facades可以工作,因为在app/config/app.php
中有一个别名部分
'aliases' => array(
'App' => 'Illuminate\Support\Facades\App',
'Artisan' => 'Illuminate\Support\Facades\Artisan',
'Auth' => 'Illuminate\Support\Facades\Auth',
'Blade' => 'Illuminate\Support\Facades\Blade',
这个别名意味着无论何时使用,比如说,App
facade
`App::someMethod`
Laravel实际上调用了illighted\Support\Facades\App
上的getFacadeAccessor
。系统中没有全局类App
。如果有,它将导致类似的问题与外观
在系统中获取Feed
=>illumb\Support\Facades\Facade\FeedFacade
的别名,并将实现类Feed
移出全局命名空间(将文件移动到适当的位置)
你应该准备好了
另外,冒着让您困惑的风险,您不需要将自己的类放在illumb\Etc\…
名称空间中,您可能应该将它们放在自己的名称空间中,除非您试图让核心Laravel团队接受您的类作为官方提要服务
<?php
namespace My\Namespace;
class Feed
{
}
return new \My\Namespace\Feed;