Symfony, действие доступно только форварду - PullRequest
4 голосов
/ 30 июня 2011

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

Я пытаюсь достичь этого, потому что первое действие обрабатывает множество проверок, затем, если оно не выполняется, оно остается в этом действии.Если это удастся, он будет направлен на соответствующее действие;это действие должно иметь безопасные входные данные (проверено с первого действия).Чтобы сохранить код СУХИМ, второму действию не нужно повторно проверять все входные данные еще раз.

Тогда почему бы не сделать простой закрытый метод?Второе действие является своего рода плагином, оно решается на лету, откуда оно идет от первого, у этого действия есть свой собственный набор других будущих действий / шаблонов.Имеет больше смысла просто пересылать, а не пытаться обрабатывать множество дел, о которых Symfony уже позаботился.

Ответы [ 3 ]

7 голосов
/ 30 июня 2011

Есть несколько способов сделать это.

1) Убедитесь, что ваши действия не доступны для маршрутизации.Если у вас есть маршруты с подстановочными знаками, это будет сложнее, но вы всегда можете добавить маршрут, который будет указывать URL для вашего действия на страницу 404.Добавьте что-то вроде этого к своему routing.yml:

disabled_action:
  url: /disabledController/disabledAction
  params: { module: default, action: error404 }

2) Проверьте стек действий после выполнения вашего действия.Стек действий позволяет узнать, с какого действия вы были перенаправлены.Вы можете получить к нему доступ в своем действии, используя $this->getController()->getActionStack().Если getSize() больше 1 (в конфигурации по умолчанию), то вас перенаправят.

0 голосов
/ 30 июня 2011

Мне любопытно, почему вы пытаетесь достичь этого.Вы хотите получить несколько точек доступа для этого действия?Что если вы просто определили закрытый метод (который по умолчанию недоступен из Интернета) и вызвали его непосредственно из другого действия?

0 голосов
/ 30 июня 2011

Используйте параметр referrer, доступный в запросе

$ request-> getReferer () даст вам полный URL предыдущего действия

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