programing

AJAX만의 루트를 제한할 수 있습니까?

nicegoodjob 2023. 2. 11. 23:28
반응형

AJAX만의 루트를 제한할 수 있습니까?

XHR 요구에 대해서만 Symfony 2 루트를 제한할 수 있습니까?AJAX를 통해서만 접근할 수 있는 루트를 선언하고 싶습니다.

다음과 같이 각 AJAX 고유의 액션에 몇 줄 더 추가하고 싶지 않습니다.

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

정의하고 싶다:

  • AJAX 요청에 대한 규칙 1개
  • 동일한 URL에 대한 GET/POST 요구에 대한 규칙 1개

위와 같은 상태를 피하기 위해서입니다.

이 질문이 좀 오래된 것은 알지만, 그 사이에 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\Routermethod resolve Parameters()를 재정의하여 추가 요건을 처리하기 위한 독자적인 로직을 구현합니다.

다음으로 라우팅에서 다음과 같은 작업을 수행할 수 있습니다.

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

요청이 발생하는 것을 막을 수 있을지 확실하지 않지만 현재 요청을 확인함으로써 컨트롤러에서 XHR 요청을 확인할 수 있습니다.

코드는 다음과 같습니다.

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

브라우저의 불일치 및 프록시 간섭의 가능성이 있기 때문에 이 방법은 100% 신뢰할 수 없습니다.그러나 이는 비동기 요청을 확인하는 주요 방법이며 많은 사람들이 권장하고 있습니다.cr의 경우

URL 파라미터

또는 URL에 파라미터를 추가하여 요청을 비동기식으로 식별하는 방법도 있습니다.이것은, 다음의 추가에 의해서 실현됩니다.?ajax=1를 참조해 주세요.다음으로 파라미터를 확인합니다.

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

물론 이 시점에서 특정 경로를 생성할 수도 있습니다. /ajax/index/.

아니, 너는 할 수 없어.사용하는 프레임워크에 따라 달라지지 않습니다.AJAX 요청은 기본적으로 서버에 대한 요청일 뿐입니다.100% 신뢰할 수 있는 솔루션은 없습니다.단순히 '핵'입니다.

찾으려는 항목이 Symfony 라우팅 구성에 없습니다.

요청: isXmlHttpRequest는 100% 신뢰성이 없으며 JavaScript 라이브러리가 저장한HTTP 헤더를 체크합니다.

JavaScript 라이브러리가 X-Requested-With HTTP 헤더를 설정한 경우 작동합니다.프로토타입, Mootools, jQuery와 함께 작동하는 것으로 알려져 있습니다.

기재된 결과에 도달하기 위한 요건을 사용할 수 있습니다.
예를 들어으로 루트를 하면, 으로 해야 .

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

언급URL : https://stackoverflow.com/questions/11557658/is-it-possible-to-restrict-a-route-for-ajax-only

반응형