php - 如何扩展 Laravel 供应商包

标签 php laravel service-provider

我正在尝试扩展 Kryptonit3/Counter .特别是,我需要覆盖 Counter.php 类中的一个私有(private)函数以仅检索过去 24 小时内的点击次数。

Counter.php 私有(private)函数:

private static function countHits($page)
{
    $page_record = self::createPageIfNotPresent($page);
    return number_format($page_record->visitors->count());
}

我需要的功能:
private static function countHits($page)
{
    $page_record = self::createPageIfNotPresent($page);
    return number_format($page_record->visitors()->where('created_at', '>=', Carbon::now()->subDay())->count());
}

因此,我正在寻找覆盖此包的正确方法。

方法一 : 我应该创建自己的类来扩展 Counter.php 并在这个类中包含我的自定义函数吗?如果是这样,原始类中包含的私有(private)类会发生什么情况?我应该创建一个服务提供者吗?这个服务提供者会是什么样子?

方法二 : 我应该 fork 供应商包并根据我自己的需要更新这个包吗?

我已经查看了与此主题相关的所有 stackoverflow 问题,但它们还不够清楚。

更新:
这是我到目前为止所做的:

创建 MyCounter 类:
<?php

namespace App\Helpers\Counter;

use Kryptonit3\Counter\Counter;
class MyCounter extends Counter
{

}

创建 MyCounterServiceProvider:
<?php

namespace App\Providers;

use App\Helpers\MyCounter;
use Illuminate\Support\ServiceProvider;

class MyCounterServiceProvider extends ServiceProvider
{
/**
 * Bootstrap the application services.
 *
 * @return void
 */
public function boot()
{
    //
}

/**
 * Register the application services.
 *
 * @return void
 */
public function register()
{
    $this->app['counter'] = $this->app->share(function($app)
    {
        $visitor = $app['visitor'];
        return new MyCounter($visitor);
    });
}
}

创建 MyCounterFacade:
<?php

namespace App\Helpers\Counter;


use Illuminate\Support\Facades\Facade;

class MyCounterFacade extends Facade
{
    protected static function getFacadeAccessor() { return 'mycounter'; }
}

在 config/app.php 中包含提供者和别名:
App\Providers\MyCounterServiceProvider::class,


'MyCounter'             => App\Helpers\Counter\MyCounterFacade::class,

最佳答案

问题与 MyCounterServiceProvider 有关。下一段代码解决了这个问题。

 public function register()
{
    $this->app->singleton('mycounter', function() {
        return $this->app->make('App\Helpers\Counter\MyCounter');
    });
}

关于php - 如何扩展 Laravel 供应商包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41242301/

相关文章:

php - Laravel 中 $errors 的含义是什么

laravel - 未找到类 'Yajra\DataTables\DatatablesServiceProvider'

php - 垃圾收集 Php

php - 电子邮件验证。从网站访问时工作,但未通过单元测试

php - laravel4 Composer 安装遇到 proc_open 不可用错误

java - SSO sp 启动流程中 ?wa=wsignoutcleanup1.0 的意义是什么

laravel - 使用 Laravel 并包含一个包,为什么我会调用未定义的方法

php - 比较两个字符串以获得唯一性百分比

authentication - 带有 Route::resource 的“auth”中间件

php - 为什么我找不到类(class)? (Laravel, PHP)