1

私は Symfony2 を使用しており、Rss エンティティを持つ ReaderBundle を持っています。

このエンティティの CRUD を作成しました。

php app/console generate:doctrine:crud --entity=RSSReaderBundle:Rss --format=annotation --with-write

キャッシュを接続する前は、すべて問題ありませんでした。

$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
require_once __DIR__.'/../app/AppCache.php';
require_once __DIR__.'/../app/AppKernel.php';

Debug::enable();

$kernel = new AppKernel('dev' , true);
$kernel->loadClassCache();
$kernel = new AppCache($kernel); // THAT STRING IS MAIN PROBLEM
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

そして、いくつかのレコードを削除しようとすると、次のエラーが表示されます: メソッドを明確に示すフォームを作成しました:

No route found for "POST /rss/delete/30": Method Not Allowed (Allow: DELETE)
405 Method Not Allowed



private function createDeleteForm($id)
    {
        return $this->createFormBuilder()
            ->setAction($this->generateUrl('rss_delete', array('id' => $id)))
            ->setMethod("DELETE")
            ->add('submit', 'submit', array('label' => 'Delete'))
            ->getForm()
        ;
    }

問題は見つかりませんでした。助けてください

4

4 に答える 4

1

この問題は symfony2.2 以降に発生しました

Symfony\Component\HttpFoundation\Request::$httpMethodParameterOverrideapp.php ファイルでブール値を手動で変更する必要があります。

// When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter
Request::enableHttpMethodParameterOverride();
于 2015-08-26T18:22:17.857 に答える
0

HTMLフォームにはありませmethod="DELETE"ん...少なくともほとんどすべてのブラウザではサポートされていません.ajaxリクエストでのみサポートされています.

ルートへの DELETE および POST リクエストを許可することで、これを回避します。

于 2013-10-04T16:24:06.387 に答える
0

私はあなたと同じ問題を抱えています (PUT および DELETE HTTP メソッドを使用) が、解決策がわかりません。

あなたは:
a) // THAT STRING IS MAIN PROBLEMを取り除きました
か、または
b) $kernel = new AppCache($kernel); を取り除きましたか? // その文字列が主な問題です

解決策 b) はキャッシュを使用しない場合と同じであるため、私の場合、ページの読み込みに非常に長い時間がかかるため、役に立ちません。

@Nifr: メソッド PUT と DELETE があると思いました。このリンクの指示に従ってフォームでそれらを使用します: http://symfony.com/fr/doc/current/cookbook/routing/method_parameters.html 実際、Symfony2 はメソッドが PUT か DELETE かどうかを判断できます。 、POST または GET。しかし、どういうわけか、キャッシュはできません...

それについて何か助けはありますか?

編集: app.php ファイルで何も変更しない解決策を見つけました。基本的には、symfony2 の request オブジェクトの getMethod メソッドが PUT メソッドや DELETE メソッドを認識していないことが原因です。ポイントは、AppCache.php ファイルでそれを変更することです。

AppCache.php ファイルのメソッド invalidate をオーバーライドするだけです。

protected function invalidate(Request $request, $catch = false)
{
  $request->setMethod($request->request->get('_method'));
  return parent::invalidate($request, $catch);
}

ここでは、フォームから投稿された方法でリクエストの方法を変更するだけです。

于 2014-09-25T08:07:11.183 に答える