Создание фабричного класса? - PullRequest
0 голосов
/ 04 октября 2018

Я нашел этот фрагмент кода:

class WebsitesTableFactory extends AbstractModelFactory
{
    public function __invoke(ContainerInterface $container)
    {
        $dbAdapter = $container->get('bc_db');
        $tableGateway = $this->initializeTableGateway('websites', $dbAdapter, null, $container->get(Websites::class));
        return new WebsitesTable($tableGateway);
    }
}

Я привык к тому, что:

  • реализует FactoryInterface вместо расширения AbstractModelFactory
  • с использованием ServiceLocatorInterface в качестве параметра для функции createService

Чем это отличается от этой реализации?

А что означает ::class?

Версия Zend 2.5.

1 Ответ

0 голосов
/ 04 октября 2018

Константы класса PHP

::class возвращает FQCN (полное имя класса), например "\ Namespace \ Path \ To \ Classname".


ZF2 - 3 фабрики

При подготовке к ZF3 стало обычным делом использовать __invoke(ContainerInterface $container) вместо createService(ServiceLocatorInterface $serviceManager).

Он был использован в качестве фабрики по умолчанию, к которой вы привыкли, был заменен другим, который реализует другой интерфейс, хотя оставляет место для перехода ZF2 в ZF3.

Стандартный класс Factory в ZF3 выглядит следующим образом:

use Zend\ServiceManager\Factory\FactoryInterface;

class DemoFactory implements FactoryInterface
{
    public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
    {
        // Do your thing
    }
}

Примечание: оператор FactoryInterface отличается от оператора ZF2!


Обновите все

Очевидно, что вы все еще используете ZF2.Я настоятельно рекомендую вам обновить (или начать обновление) до ZF3.Вы можете прочитать руководство по миграции , однако я бы посоветовал вам просто обновить все одним махом.

Мое предложение заставит вас много работать (возможно, в зависимости от размера вашего приложения), но все будет актуально.

Я рекомендую зайти в ваш composer.json и удалить все ограничения версий, а затем обновить все до composer update до последних версий.Затем перейдите оттуда, и вам придется исправлять бесконечные ошибки из-за устаревших вещей.

(Могут быть исключения пакетов, которые не могут быть обновлены, по какой-либо причине, пожалуйста, обратите внимание, что они могут вызвать непреднамеренные ограничения версии, если вы do выполняете приведенный выше совет).


Вам может понадобиться помощь

С другой стороны, вы не знаете о ::class возврате FQCN, который является довольно простым и стандартным для использования и имеетПрошло довольно много времени (начиная с PHP 5.6 (выпущено на полпути 2014 ), если память служит).Таким образом, вышесказанное может быть слишком сложным, и я бы порекомендовал вам обратиться за помощью к коллеге или кому-то, кто имеет больше опыта в разработке Zend Framework.

...