查阅了一些关于 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/