我试图让我的Facade类工作,但是看起来Laravel在我的Facade类上调用方法而不是在我的根类上调用它。所以我得到方法无法解释的错误。当我直接从绑定创建feed类时(App :: make('feed') - > addArticle();)它可以正常工作。所以我认为我的Facade有一些东西。有任何想法吗?提前谢谢。
控制器
class RssController extends BaseController
{
public function getArticles() {
Feed::addArticle();
}
}
的ServiceProvider
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';
}
}
Root Class
class Feed {
//vars
public function __construct()
{
}
public function make() {
return new Feed();
}
public function addArticle() {
return '@addArticle';
}
答案 0 :(得分:3)
问题似乎是您希望Laravel Facade(Feed::
)和服务提供者的实现类(class Feed
)具有相同的名称。外观起作用,因为在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
外观
`App::someMethod`
Laravel实际上会在getFacadeAccessor
上调用Illuminate\Support\Facades\App
。系统中没有全局类App
。如果有,它会导致与门面类似的问题。
获取Feed
=> Illuminate\Support\Facades\Facade\FeedFacade
的别名到您的系统中,并从全局命名空间中获取实现类Feed
(将文件移动到适当的位置)
<?php
namespace My\Namespace;
class Feed
{
}
...
return new \My\Namespace\Feed;
你应该全力以赴。
此外,冒着让您感到困惑的风险,您不需要在Illuminate\Etc\...
命名空间中删除自己的课程,除非您尝试将其放在自己的名称中,否则您应该将它们放在自己的让Laravel核心团队接受您的课程作为官方饲料服务。