查看了几个关于外墙和laravel 4的教程......尝试了一些......不喜欢他们工作的方式。
例如,他们并没有提供一种方法来定义外观文件和服务提供商的存储地点......我试图远离那个并让我的头撞到几面墙直到我决定做这个帖子。
所以:假设我有一个名为Laracms(laravel cms)的应用程序。
我想将我创建的所有内容 - 外墙,服务提供商等存储在名为laracms的应用程序下的文件夹中。
所以我有/ app / laracms / facades,/ app / laracms / serviceproviders等等。我不想将外观与数据库模型混合在一起,我希望尽可能保持分离。
现在让我们看一下外观的设置名称(我希望实现一个设置类在视图中使用,管理员设置misc。的东西)。
设置:: get(),Settings :: set()作为方法。
任何人都可以解释如何正确设置外墙吗?我不知道我做错了什么,我需要一个新的开始。
谢谢, 克里斯
通过简单解释如何以及为什么一步一步地寻找。
答案 0 :(得分:13)
首先,您需要转到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
部分 - &gt; 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()
您需要注意我使用了带有大写字母的文件夹,因为按照惯例,命名空间以大写字母开头。
答案 1 :(得分:2)
制作Facade有三个组成部分:
<强> 1。想成为门面课程:
<?php namespace Moubarmij\Services\ModelsServices;
class AuthenticationService extends MoubarmijService implements AuthenticationServiceInterface{
/**
* @param $email
* @param $password
*
* @return mixed
*/
public function login($email, $password)
{
return Sentry::authenticate([
'email' => $email,
'password' => $password,
]);
}
/**
* @return mixed
*/
public function logout()
{
return Sentry::logout();
}
}
<强> 2。立面工作所需的类别:
<?php namespace Moubarmij\Facades;
use Illuminate\Support\Facades\Facade;
/**
* Class AuthenticationServiceFacade
* @package Moubarmij\Services\ModelsServices
*/
class AuthenticationServiceFacade extends Facade{
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor() { return 'authentication_service'; }
}
注意:authentication_service可以是您想要的任何内容(它是在IOC中注册的组件的名称)
第3。服务提供商
<?php namespace Moubarmij\Providers;
use Illuminate\Support\ServiceProvider;
/**
* A service provider for the Authentication Service
*
* Class AuthenticationServiceSP
* @package Moubarmij\Providers
*/
class AuthenticationServiceSP extends ServiceProvider {
/**
* bind interfaces
*
* @return void
*/
public function register()
{
// Register 'authentication_service' instance container to our AuthenticationService object
$this->app['authentication_service'] = $this->app->share(function($app)
{
return $app->make('Moubarmij\Services\ModelsServices\AuthenticationService');
});
// Shortcut to auto add the Alias in app/config/app.php
$this->app->booting(function()
{
$loader = \Illuminate\Foundation\AliasLoader::getInstance();
$loader->alias('AuthenticationService', 'Moubarmij\Facades\AuthenticationServiceFacade');
});
}
}