Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Laravel 4中创建自定义外观_Php_Database_Laravel_Laravel 4_Facade - Fatal编程技术网

Php 如何在Laravel 4中创建自定义外观

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

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

例如,它们并不都提供一种定义在何处存储门面文件和服务提供者的方法。。。我试着远离它,我的头撞到了几堵墙,直到我决定做这条线

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

我想把我创建的所有东西都存储在一个名为laracms的应用程序下的文件夹中——外观、服务提供商等

所以我有/app/laracms/facades、/app/laracms/serviceproviders等等。我不想把外观和数据库模型混为一谈,我想把事情尽可能分开

在我的例子中,现在让我们看一下facade的设置名称(我想实现一个设置类,用于在视图和管理中设置misc.stuff)

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

有人能解释一下如何正确设置立面吗?我不知道我做错了什么,我需要一个新的开始

谢谢, 克里斯


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

首先,你需要进入
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类
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();
    }

}
<?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');
        });

    }
}