Nano Hash - криптовалюты, майнинг, программирование

zf2 - получение плагинов контроллера в фабрике форм/контроллеров

Можно ли получить доступ к плагинам контроллера из фабрики форм/контроллеров (любой фабрики, реализующей FactoryInterface)?

У меня есть фабрика форм, в которой я хочу установить действие формы в зависимости от параметра запроса, но мне нужно получить доступ к URL-адресу из маршрута, определенного в конфигурации.

Итак, тогда как в контроллере я бы использовал плагин контроллера URL:

$form->setAttribute('action', $this->url()->fromRoute('appointment.add', array('clientId' => $clientId)));

... как я могу получить доступ к этому на фабрике? например что-то вроде:

class MyFormFactory implements FactoryInterface
{
    public function createService(ServiceLocatorInterface  $serviceLocator){
        $serviceManager = $serviceLocator->getServiceLocator();
        //...snip...
        $form = new AddAppointmentForm($client);
        $serviceManager->get('ControllerPluginManager');
        $url =  $controllerPluginManager->get('Url');
        die($url->fromRoute('appointment.add', ['clientId' => $clientId]));
        return $form;
    }

Ответы:


1

Не рекомендуется использовать плагины контроллера в контексте, не являющемся контроллером. Чтобы собрать URL-адрес с маршрутизатором ZF2, вы можете просто использовать маршрутизатор, который также доступен в файле ServiceManager.

$router = $serviceManager->get('HttpRouter');
$url = $router->assemble(['clientId' => $clientId], ['name' => 'appointment.add']);
22.04.2017
  • Отлично, это то, на что я надеялся. Я согласен с вашим принципом использования плагина вне контекста контроллера, однако подумал, что может быть универсальный/базовый помощник по URL-адресу, такой как доступный помощник представления. Использование HttpRouter идеально, спасибо. 22.04.2017
  • Более устойчивый способ — преобразовать фабрику форм в сервис. Создайте его через Service Factory, передав диспетчер служб. Просто практический совет, мы уже делали это - мы перешли к настройке атрибута действия на уровне контроллера - есть некоторые крайние случаи, когда маршрутизатор не будет содержать текущую информацию, и в будущем усилия по поддержке будут меньше. 24.04.2017

  • 2

    Вы можете создать экземпляр \Zend\Mvc\Controller\PluginManager на своей фабрике и легко получить URL-адрес или любой другой плагин, который вы хотите. Просто небольшая проблема, вы не можете установить свой контроллер в менеджере плагинов. Таким образом, зависимый от контроллера плагин НЕ будет работать должным образом.

    22.04.2017
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..