Как расширить класс laravel Illuminate \ Translation \ Translator - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу расширить этот класс Illuminate\Translation\Translator, который расширяет \Illuminate\Support\NamespacedItemResolver

<?php

namespace Illuminate\Translation;

use Countable;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;
use Illuminate\Support\Collection;
use Illuminate\Support\Traits\Macroable;
use Illuminate\Support\NamespacedItemResolver;
use Illuminate\Contracts\Translation\Translator as TranslatorContract;

class Translator extends NamespacedItemResolver implements TranslatorContract
{
    use Macroable;
}

Я расширил \Illuminate\Support\NamespacedItemResolver в свой собственный класс

, но когда я вызываю Translator, он все ещепринимая функции базового класса.\Illuminate\Support\NamespacedItemResolver.

<?php

namespace App\Repositories;

class NamespaceParser extends \Illuminate\Support\NamespacedItemResolver
{
}

ОБНОВЛЕНИЕ

создал новый класс Translator и попытался расширить его в AppServiceProvider и ниже WORKED

public function register()
   {
         $loader = $this->app['translation.loader'];

        // When registering the translator component, we'll need to set the default
        // locale as well as the fallback locale. So, we'll grab the application
        // configuration so we can easily get both of these values from there.
        $locale = $this->app['config']['app.locale'];

       $this->app->extend('translator', function () {
             new \App\Repositories\Translator($loader, $locale);
       });
   }

1 Ответ

0 голосов
/ 30 ноября 2018

То, что вы пытаетесь достичь, является довольно продвинутым и описано здесь:

https://laravel.com/docs/5.7/container#extending-bindings

Пример пакета, который делает именно это, можно найти здесь:

https://github.com/onlinepets/laravel-conditional-migrations/blob/master/src/ServiceProvider.php

Теперь вы должны указать Laravel использовать ваш собственный класс вместо класса по умолчанию.

Сводка

Вы должны указать Laravel Service Container использовать другой класс, чем обычно.Это можно сделать, вызвав $this->app->extend в функции регистрации поставщика услуг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...