symfony - 「post」または「delete」または「put」メソッドを使用したSymfony2リンク
質問する
5045 次
3 に答える
5
アンカー<a href="#">
は常に GET リクエストを使用します。それを変更する方法はありません。ただし、Symfony を使用して PUT または DELETE リクエストを偽装することは可能です。
Symfony フォームはフォームに隠しフィールドを追加することで動詞を偽造します。
<input type="hidden" name="_method" value="PUT" />
次に、動詞が POST であるかどうかを内部的にチェックし、_method
パラメーターをチェックして、動詞を POST から PUT に変更します。これは、POST メソッドを使用する HTML フォームに対してのみ機能します。
GET 動詞でも同じことができますが、イベント リスナーを使用する必要があります。以下に例を示します。
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernel;
class VerbListener
{
public function onKernelRequest ( GetResponseEvent $event )
{
$request = $event->getRequest();
if ( HttpKernel::MASTER_REQUEST === $event->getRequestType()
&& $request->getMethod() === 'GET' )
{
if ( $request->query->get('_method') === 'PUT' ) {
$request->setMethod( 'PUT' );
}
}
}
}
router_listener
また、サービスは、ルートをコントローラーに一致させるサービスよりも高い優先順位で登録する必要があります。
services:
acme.verb.listener:
class: Acme\Bundle\Listener\VerbListener
tags:
- { name: kernel.event_listener,
event: kernel.request,
method: onKernelRequest,
priority: 100 }
_method
パラメータを使用してリンクを生成できるようになりました
<a href="foo?_method=PUT"></a>
于 2015-02-05T17:18:47.980 に答える
1
ルーティング ファイル内:
entity_edit:
pattern: /entity/{id}/edit
defaults: {_controller: MyBundle:Entity:put}
私のコントローラー(fosRest付き):
/**
* @Rest\View()
*/
public function putAction(Request $request, $id)
{
...code ...
}
私の小枝:
<a href="{{ path('entity_edit', {'id': data.id} ) }}" >Edition</a>
于 2013-09-26T21:35:13.647 に答える