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

标签 php database laravel laravel-4 facade

查阅了一些关于 facades 和 laravel 4 的教程...尝试了一些...不喜欢它们的工作方式。

例如,它们并没有提供一种方法来定义外观文件和服务提供者的存储位置......我试图摆脱它,但我的头撞到了几堵墙,直到我决定这样做这个话题。

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

我想将我创建的所有内容(外观、服务提供商等)存储在名为 laracms 的应用程序下的文件夹中。

所以我会有/app/laracms/facades、/app/laracms/serviceproviders 等等。我不想将外观与数据库模型混合在一起,我希望尽可能将它们分开。

现在让我们以我的例子为例,外观的设置名称(我想实现一个设置类以在 View 和管理中使用以设置杂项)。

Settings::get()、Settings::set() 作为方法。

谁能解释一下如何正确设置外观?我不知道我做错了什么,我需要一个新的开始。

谢谢, 克里斯

逐步寻找简单的方法和原因解释。

最佳答案

首先,您需要转到 app/config/app.php 并在 providers 部分添加:

'Laracms\Providers\SettingsServiceProvider',

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

 'Settings' => 'Laracms\Facades\Settings',

在你的 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();
            });
    }

}

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

<?php

namespace Laracms\Facades;

use Illuminate\Support\Facades\Facade;

class Settings extends Facade {

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

}

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

<?php

namespace Laracms;

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

   public function set() {echo "set"; }
}

因为您想将文件放在自定义文件夹 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"
    ]
},

现在您需要在项目文件夹中的控制台中运行:

composer dump-autoload

创建类图

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

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

关于php - 如何在 Laravel 4 中创建自定义 Facade,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25978931/

相关文章:

javascript - 将多维数组的 php 数组转换为 javascript 数组

PHP/Apache2 生产 Web 权限和所有权

使用 Julia 进行数据库抽象

javascript - Laravel 5 js 被 app.js 阻塞

mysql - 通过许多列进行 Eloquent 搜索并进行相关排序

laravel - 如何为特定表中的特定字段设置唯一性?

PHP加载错误: %1 is not a valid Win32 application.

php - mysqli_fetch_assoc()需要参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误?

java - 如何将Excel的特定列插入数据库

c# - 使用for循环删除数据库中的数据