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

Волшебный метод контроллера Symfony?

Я пытаюсь использовать Symfony для воспроизведения поведения в существующей структуре (зикула). Эта структура расширяема с помощью модулей, которые в основном представляют собой расширенные пакеты симфонии. В старой структуре были такие URL-адреса

index.php?module=foo&type=bar&func=zip

что на языке symfony примерно переводится как

index.php?bundle=foo&controller=bar&method=zip

В фреймворке есть AbstractController, у которого есть волшебный метод, например:

public function __call($method, $args)
{
    $event = new \Zikula\Core\Event\GenericEvent($this, array('method' => $method, 'args' => $args));
    $this->eventManager->dispatch('controller.method_not_found', $event);
    if ($event->isPropagationStopped()) {
        return $event->getData();
    }
}

поэтому, если вы создали URL-адрес с методом, которого не было в пакете, вы можете создать прослушиватель для его захвата и отправки ответа, который выглядит и ведет себя так, как будто он пришел из указанного пакета . Мы используем это для вызова модульных служб, которые доступны для всех модулей и предоставляются в отдельном модуле, но выглядят так, как будто они обслуживаются модулем «хост».

Теперь я пытаюсь воспроизвести это, используя symfony и маршрутизацию.

первая проблема заключается в создании маршрута, который технически не существует. Это возможно?

Вторая проблема — перехват RouteNotFoundException (что я умею делать, у нас уже есть слушатели для других исключений).

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

Я попытался изменить текущий слушатель на контроллер, а также попытался добавить метод к нашему расширению symfony AbstractController, но еще не достиг того, чего я надеюсь достичь. Я надеюсь на некоторые предложения по новым идеям или методам, чтобы попробовать.

28.05.2015

  • Не делай этого. Была веская причина, по которой такие вещи были удалены в symfony 2. 28.05.2015
  • @Paziツ Значит ли это, что это было возможно в Symfony 1? Есть ли у вас какие-либо упоминания об этой функции и / или почему она была удалена? 29.05.2015
  • Я не работаю с Symfony 1 и никогда не работал. Как я уже упоминал, я пытаюсь использовать Symfony для репликации функции в другой/старой среде. 29.05.2015
  • Вы можете написать прослушиватель исключений Symfony и прослушивать NotFoundHttpException, а затем делать все, что вы пытаетесь сделать. 29.05.2015
  • Позвольте мне понять это прямо, вместо того, чтобы использовать стандартный способ в Symfony, то есть создать действие в контроллере и просто связать с ним маршрут, вы хотите: прослушивать исключение, когда маршрут, который вы не связывали с действием в контроллер выбрасывается, чтобы вы могли затем связать его с действием в контроллере, чтобы вызвать его? Может быть, в этом случае требуется несколько слов об общей картине. Чтобы перевести ваши старые роуты фреймворка для Symfony, вам может понадобиться всего лишь настроить пару переписываний на вашем любимом веб-сервере. 29.05.2015
  • вы можете написать действие, которое принимает параметры и ищет с ними маршрут sf. Но это может быть только временным решением, пока вам действительно не удастся напрямую использовать маршруты sf. Посмотрите на объект SF2 HttpFoundation/Request, где вы можете извлечь все свои параметры и построить маршруты из него... Хотя это кажется очень неправильным. Почему не app.php/foo/bar/zip? 29.05.2015

Ответы:


1

Я отказался от попыток воспроизвести точное поведение, поскольку это кажется невозможным (это также довольно сложно описать). Поэтому я прибегнул к обычному контроллеру со стандартным маршрутом, но я нашел способ сделать его принадлежащим исходному модулю «хост». Спасибо Gerry, ggioffreda и DerStoffel за предложенные идеи.

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

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

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

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

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

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

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

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