2013-10-04 81 views
1

我正在使用Symfony2,並且我有一個ReaderBundle,它有一個Rss實體。symfony2 crud&http cache

我爲此實體創建了CRUD。

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

在連接Cache之前,一切都很好。

$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() 
     ; 
    } 
 

我沒有發現問題。請幫助

回答

0

我們必須刪除與註釋的字符串「該字符串的主要問題」。緩存工作情況完全相同。和CRUD工作權利

0

有HTML表單沒有method="DELETE" ...至少不支持幾乎所有的瀏覽器 - 僅在Ajax請求。

通過允許DELETE和POST請求到達路由來解決此問題。

+0

連接緩存之前,一切都很好。當我評論$內核=新的AppCache($內核);刪除功能的作品 –

0

你好拉基塔弗拉季斯拉夫。

我有,你有同樣的問題(與PUT和DELETE HTTP方法),但我不明白您的解決方案。

你有沒有: 一)剛剛擺脫//該字符串的主要問題 或 B)擺脫$內核=新的應用程序緩存($內核)的; //該字符串的主要問題

B液)是不使用緩存,以便於我而言,它沒有幫助的頁面需要很長的時間來加載相同。

@Nifr: 我認爲有方法PUT和DELETE。我按照這個鏈接上的說明使用它們:http://symfony.com/fr/doc/current/cookbook/routing/method_parameters.html 所以實際上,Symfony2能夠判斷一個方法是PUT,DELETE,POST還是GET。但不知何故,緩存不能...

任何幫助嗎?

非常感謝。

編輯: 我發現,不涉及在app.php文件進行任何更改的解決方案。 基本上,問題來自symfony2的請求對象的getMethod方法不知道PUT或DELETE方法。重點是在AppCache.php文件中改變它。

我們只需重寫AppCache的方法invalidate即可。PHP文件:

enter code here保護功能無效(請求$請求,$抓= FALSE) enter code here { enter code here $請求 - >使用setMethod($請求 - >請求 - >獲取( '_法')); enter code here return parent :: invalidate($ request,$ catch); enter code here}

在這裏,我只是通過從表單發佈的方法更改請求的方法。