我正试图让我的Facade类工作,但Laravel似乎在我的Facadeclass上调用该方法,而不是在我的根类上调用它。所以我得到了方法未定义的错误。当我直接从绑定创建提要类时(App::make('feed')->addArticle();)它是有效的。所以我觉得我的外表有一些问题。有什么想法吗?提前感谢。
控制器
class RssController extends BaseController
{
public function getArticles() {
Feed::addArticle();
}
}
服务提供商
use IlluminateSupportServiceProvider;
class FeedServiceProvider extends ServiceProvider {
public function register()
{
$this->app->bind('feed', function()
{
return new Feed;
});
}
}
立面等级
use IlluminateSupportFacadesFacade;
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
)具有相同的名称。立面之所以有效,是因为在app/config/app.php
中有一个别名部分
'aliases' => array(
'App' => 'IlluminateSupportFacadesApp',
'Artisan' => 'IlluminateSupportFacadesArtisan',
'Auth' => 'IlluminateSupportFacadesAuth',
'Blade' => 'IlluminateSupportFacadesBlade',
这种混叠意味着无论何时使用App
facade
`App::someMethod`
Laravel实际上在IlluminateSupportFacadesApp
上调用了getFacadeAccessor
。系统中没有全局类App
。如果真的存在的话,它会导致立面出现类似的问题。
在系统中获取Feed
=>IlluminateSupportFacadesFacadeFeedFacade
的别名,并从全局命名空间中获取实现类Feed
(将文件移动到适当的位置)
<?php
namespace MyNamespace;
class Feed
{
}
return new MyNamespaceFeed;
你应该做好一切准备。
此外,冒着让你感到困惑的风险,你不需要把自己的类放在IlluminateEtc...
命名空间中,你可能应该把它们放在自己的命名空间中,除非你试图让核心Laravel团队接受你的类作为官方提要服务。