如何在Laravel 4中创建自定义Facade

ied*_*vil 6 php database facade laravel laravel-4

看了几个关于外墙和laravel 4的教程...尝试了一些......不喜欢他们工作的方式.

例如,他们并不都提供了一种定义外观文件和服务提供商存储位置的方法......我试图远离那个并让我的头撞到几个墙,直到我决定做这个线程.

所以:假设我有一个名为Laracms(laravel cms)的应用程序.

我想将我创建的所有内容 - 外墙,服务提供商等存储在名为laracms的app下的文件夹中.

所以我有/ app/laracms/facades,/ app/laracms/serviceproviders等等.我不想将外观与数据库模型混合在一起,我希望尽可能将内容保持分离.

在我的例子中,现在让我们看一下外观的设置名称(我希望实现一个设置类,用于视图和管理员来设置misc.的东西).

Settings :: get(),Settings :: set()作为方法.

任何人都可以解释如何正确设置外墙?我不知道我做错了什么,我需要一个新的开始.

谢谢,克里斯

寻找一步一步的简单解释如何以及为什么.

Mar*_*łek 13

首先,您需要转到app/config/app.phpproviders添加:

'Laracms\Providers\SettingsServiceProvider',
Run Code Online (Sandbox Code Playgroud)

在部分中的同一文件中,aliases您应该添加:

 'Settings' => 'Laracms\Facades\Settings',
Run Code Online (Sandbox Code Playgroud)

app/Laracms/Providers你的应该创建文件SettingsServiceProvider.php

<?php

namespace Laracms\Providers;

use Illuminate\Support\ServiceProvider;

class SettingsServiceProvider extends ServiceProvider {

    public function register()
    {
        $this->app->bind('settings', function()
            {
                return new \Laracms\Settings();
            });
    }

}
Run Code Online (Sandbox Code Playgroud)

app/Laracms/Facades/你的应该创建文件Settings.php:

<?php

namespace Laracms\Facades;

use Illuminate\Support\Facades\Facade;

class Settings extends Facade {

    protected static function getFacadeAccessor() { return 'settings'; }

}
Run Code Online (Sandbox Code Playgroud)

现在在您的app/Laracms目录中,您应该创建文件Settings.php:

<?php

namespace Laracms;

class Settings {
   public function get() {echo "get"; }

   public function set() {echo "set"; }
}
Run Code Online (Sandbox Code Playgroud)

由于您希望将文件保存在自定义文件夹中Laracms,因此需要将此文件夹添加到您的文件夹中composer.json(如果使用标准app/models文件夹,则无需向此文件添加任何内容).所以现在打开composer.json文件并在autoload- > classmap你应该添加,app/Laracms所以composer.json的这一部分可能如下所示:

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php",
        "app/Laracms"
    ]
},
Run Code Online (Sandbox Code Playgroud)

现在,您需要在项目内部的控制台中运行:

composer dump-autoload
Run Code Online (Sandbox Code Playgroud)

创建类映射

如果一切正常,你现在应该可以在应用程序中使用Settings::get()Settings:set()

您需要注意我使用了带有大写字母的文件夹,因为按照惯例,命名空间以大写字母开头.