模型失败的Laravel外观:无法重新声明类内容

时间:2014-05-14 06:00:08

标签: php model laravel-4 facade

我想在名为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'; }
}

1 个答案:

答案 0 :(得分:0)

好吧,我明白了,问题似乎是外观和模型都被命名为相同,这是意料之外的,因为它与包一样工作,但我想这可能是因为那些没有被自动加载? / p>

无论如何,我的“解决方案”如下:

  1. 当我通过app.php加载时,从composer.json中删除"app/Serviceproviders"

  2. 重命名我的模式ContentModel和文件ContentModel.php,因为我希望我的Facade为内容。它位于标准模型文件夹中。

  3. 我的外观仍以Content命名,文件为content.php,其中包含app/Facades

  4. 这是我使用app.php文件加载的Serviceprovider

  5. 使用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()这是我内容模型中的方法。