我想在名为Content的模型中添加一个Facade。但我总是收到错误无法重新声明类内容。那是因为模型已经通过自动加载加载了吗?我该如何解决这个问题?
感谢您的帮助,谢谢。
这就是我的作曲家文件的样子
"autoload": {
"psr-4": {
"App\\": "app/"
},
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php",
"app/Serviceproviders"
]
},
这就是我的Serviceprovider的样子。
<?php namespace App\Serviceproviders;
use Illuminate\Support\ServiceProvider;
class FormandsystemServiceProvider extends ServiceProvider {
public function register()
{
$this->app->bind('content', function()
{
return new \App\models\Content;
});
$this->app->booting(function()
{
$loader = \Illuminate\Foundation\AliasLoader::getInstance();
$loader->alias('Content', '\App\Facades\Content');
});
}
}
My Facade看起来像这样。
<? namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class Content extends Facade {
protected static function getFacadeAccessor() { return 'content'; }
}
答案 0 :(得分:0)
好吧,我明白了,问题似乎是外观和模型都被命名为相同,这是意料之外的,因为它与包一样工作,但我想这可能是因为那些没有被自动加载? / p>
无论如何,我的“解决方案”如下:
当我通过app.php加载时,从composer.json中删除"app/Serviceproviders"
。
重命名我的模式ContentModel
和文件ContentModel.php
,因为我希望我的Facade为内容。它位于标准模型文件夹中。
我的外观仍以Content
命名,文件为content.php
,其中包含app/Facades
这是我使用app.php文件加载的Serviceprovider
使用Illuminate \ Support \ ServiceProvider;
class FormandsystemServiceProvider扩展ServiceProvider {
public function register()
{
$this->app->bind('content', function()
{
return new \App\models\ContentModel;
});
$this->app->booting(function()
{
$loader = \Illuminate\Foundation\AliasLoader::getInstance();
$loader->alias('Content', '\App\Facades\Content');
});
}
}
这很好用我现在可以调用Content::getFirst()
这是我内容模型中的方法。