Php 如何在Laravel 4中创建自定义外观
查阅了一些关于facades和laravel 4的教程。。。试过一些。。。我不喜欢他们的工作方式 例如,它们并不都提供一种定义在何处存储门面文件和服务提供者的方法。。。我试着远离它,我的头撞到了几堵墙,直到我决定做这条线 所以:假设我有一个名为Laracms(laravel cms)的应用程序 我想把我创建的所有东西都存储在一个名为laracms的应用程序下的文件夹中——外观、服务提供商等 所以我有/app/laracms/facades、/app/laracms/serviceproviders等等。我不想把外观和数据库模型混为一谈,我想把事情尽可能分开 在我的例子中,现在让我们看一下facade的设置名称(我想实现一个设置类,用于在视图和管理中设置misc.stuff) Settings::get()、Settings::set()作为方法 有人能解释一下如何正确设置立面吗?我不知道我做错了什么,我需要一个新的开始 谢谢, 克里斯Php 如何在Laravel 4中创建自定义外观,php,database,laravel,laravel-4,facade,Php,Database,Laravel,Laravel 4,Facade,查阅了一些关于facades和laravel 4的教程。。。试过一些。。。我不喜欢他们的工作方式 例如,它们并不都提供一种定义在何处存储门面文件和服务提供者的方法。。。我试着远离它,我的头撞到了几堵墙,直到我决定做这条线 所以:假设我有一个名为Laracms(laravel cms)的应用程序 我想把我创建的所有东西都存储在一个名为laracms的应用程序下的文件夹中——外观、服务提供商等 所以我有/app/laracms/facades、/app/laracms/serviceprovider
寻找一个简单的解释如何以及为什么的步骤。首先,你需要进入
app/config/app.php
并在提供者
部分添加:
'Laracms\Providers\SettingsServiceProvider',
在别名
部分的同一文件中,您应添加:
'Settings' => 'Laracms\Facades\Settings',
在你的app/Laracms/Providers
中,你应该创建文件setingsserviceprovider.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
目录中,您应该创建文件Settings.php
:
<?php
namespace Laracms\Facades;
use Illuminate\Support\Facades\Facade;
class Settings extends Facade {
protected static function getFacadeAccessor() { return 'settings'; }
}
<?php
namespace Laracms;
class Settings {
public function get() {echo "get"; }
public function set() {echo "set"; }
}
现在,您需要在项目文件夹内的控制台中运行:
composer dump-autoload
创建类映射的步骤
如果一切正常,您现在应该能够在应用程序中使用Settings::get()
和Settings:set()
您需要注意,我使用的文件夹是大写的,因为按照惯例,名称空间以大写字母开头。制作外观有三个组件:
- 想要成为门面类,需要成为门面的类李>
- Facade required类,它告诉Laravel它属于哪个注册类
- 服务提供者,在应用程序容器中注册Facade类
<?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();
}
}
<?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'; }
}
我是否也应该将文件夹添加到composer.json以自动加载?找不到设置服务提供程序类error@ied3vil你是对的,我已经更新了我的帖子-你需要将你的文件夹添加到composer.json中的classmap
,我发现最初,我有一个不同的问题:上面的代码现在可以正常工作了,但举个例子,我有,在get()中我正在尝试访问DB::facade的方法。。。这不起作用-知道我如何才能让它工作,正确的方法吗?@ied3vilb如果需要,请用你的代码和数据库结构创建新问题我解决了它-我所要做的就是在facade的类中添加一个use语句
<?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'; }
}
<?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');
});
}
}