我希望我的自定义库的行为类似于 Laravel 的库


I want my custom libraries to behave like thos of Laravel's

你知道在Laravel中,类是即时使用的。如:

Auth::login()

我已经添加了自己的自定义库HTMLER()那么我怎样才能表现得像 Laravel?我只需要已经实例化我的函数,而无需我在每次尝试时都实例化它。

例如,我有一个我想使用的函数get_files()

HTMLER::get_files()

HTML->get_files()

每当我想每次都必须创建类的实例时:

new HTMLER();
$x->get_files()

太尴尬了...

你已经有了你的类,所以它应该相当容易。

确保您的类位于正在自动加载的目录中。 您可以在composer.json文件中看到自动加载的目录。 或者,如果您愿意,可以添加另一个目录。

服务提供商

为您的班级创建服务提供商。 同样,请确保它位于自动加载的某个位置。 这基本上是为了告诉Laravel如何在你需要的时候让你的班级。

use Illuminate'Support'ServiceProvider;
class HtmlerServiceProvider extends ServiceProvider {
    public function register()
    {
        $this->app->bind('Htmler', function()
        {
            return new Htmler; // Name of your class, be sure to include the namespace     if you are using one.
        });
    }
}

请务必将您的服务提供商添加到 config/app.php 中的 providers 数组中。

'Htmler',

外观

接下来,您可以创建外观。 (再次自动加载)。 告诉Laravel您希望在需要时如何打电话给您的班级。

use Illuminate'Support'Facades'Facade;
class Htmler extends Facade {
    protected static function getFacadeAccessor() { return 'Htmler'; }
}

别名

如果您愿意,您还可以为立面创建一个别名,以便您可以使用您想要称呼它的任何名称...... 只需添加到 config/app.php 中的aliases数组即可。 简单的例子。

'HTMLER' => 'Htmler',

这些几乎来自 http://laravel.com/docs/facades 和 http://laravel.com/docs/ioc#service-providers 的文档

这是我

开始这样做时遵循的教程:http://fideloper.com/create-façade-laravel-4