Intereting Posts
Ошибка инициализации PHP PDO из-за «двойного порта» – Uncaught PDOException: SQLSTATE Laravel: метод BadMethodCallException не существует Расширенный код: группировка многомерного массива PHP и вычисление суммы отдельных ключей для каждого элемента массива PHP Twig: доступ к текущей переменной шаблона из макроса без передачи? динамический анализ токенов XDebug не загружается в PHP (Vista, Apache Module) подсчет строк в таблице html с использованием php stringByEvaluatingJavascriptFromString (метод iOS, что эквивалентно Android?) Как передавать данные между двумя страницами с помощью Javascript Добавление нескольких входных данных в файл php form submit ReCaptcha 2.0: включить кнопку «Отправить» при обратном вызове, если recaptcha успешно Динамически вытягивать данные из Dynamics CRM Online Как удалить последний символ в тексте? Объединение двух многомерных массивов с использованием общего значения массива Каков наилучший способ обработки рекурсии в smarty?

Можно ли ограничивать маршрут только для AJAX?

Можно ли ограничивать маршрут Symfony 2 только для запросов XHR? Я хочу объявить маршруты, которые доступны только через AJAX.

Я не хочу помещать некоторые дополнительные строки в каждое действие, подобное конкретному AJAX:

if ($request->isXmlHttpRequest()) { // do something } else { // do something else } 

Я хочу определить:

  • одно правило для запросов AJAX
  • одно правило для запросов GET / POST к одному и тому же URL-адресу

чтобы обойти условия, подобные описанным выше.

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

Полностью настраиваемый маршрут, соответствующий условиям

Для ограничения ajax это будет выглядеть так:

 contact: path: /contact defaults: { _controller: AcmeDemoBundle:Main:contact } condition: "request.isXmlHttpRequest()" 

Также возможно в аннотации:

 /** * ContactAction * * @Route("/contact", name="contact", condition="request.isXmlHttpRequest()") */ 

Мой совет будет заключаться в том, чтобы определить вашу собственную службу маршрутизатора вместо значения по умолчанию , которая будет распространяться на Symfony\Bundle\FrameworkBundle\Routing\Router и переопределить метод resolveParameters () с использованием вашей собственной логики для обработки дополнительных требований.

И тогда вы можете сделать что-то подобное в своей маршрутизации:

 your_route: pattern: /somepattern defaults: { somedefaults } requirements: _request_type: some_requirement 

Я не уверен, что вы можете предотвратить запрос, однако вы можете проверить запрос XHR в Контроллере, проверив текущий запрос

Код будет выглядеть так:

 if ($request->isXmlHttpRequest()) { // ... } 

Это не на 100% надежнее, из-за, среди прочего, несогласованности браузера и возможности вмешательства с помощью прокси. Однако это преобладающий метод проверки асинхронного запроса и рекомендуется многими. Если вы cr

URL-адрес

Альтернативой может быть добавление параметра в ваш URL для идентификации запроса как асинхронного. Это достигается путем добавления ?ajax=1 к вашему URL-адресу. Затем проверьте параметр:

 $AjaxRequest = $request->getParameter('ajax'); If($AjaxRequest == 1) { //... } 

Конечно, на этом этапе вы также можете создать определенный маршрут, например /ajax/index/ .

Нет, ты не можешь. Это не зависит от того, какую структуру вы используете, запросы AJAX в основном – это просто запросы к серверу. Нет надежного решения на 100%, просто «хаки».

То, что вы ищете, не существует в конфигурации маршрутизации Symfony.

Request :: isXmlHttpRequest даже не на 100% надежнее и проверяет HTTP-заголовки, помещенные вашей библиотекой JavaScript:

Он работает, если в вашей библиотеке JavaScript установлен HTTP-заголовок X-Requested-With. Известно, что он работает с Prototype, Mootools, jQuery.

Вы можете использовать требования для достижения описанного результата.
Итак, предположим, что вы определяете маршруты в yml-формате, вам нужно сделать что-то вроде этого

 my_route: pattern: /path/to/route defaults: { _controller: CompanyBundle:Controller:Action, _format: html } requirements: _format: xmlhttp /* not sure about the correct format because i've never checked about */ 

И вы можете, конечно, использовать _method: POST или _method: GET