2017-11-05 10 views
0

ヘッドアップ - 私はすでにhereでした。 Symfony3フォームに関する奇妙な問題。だから私は、作成したクラスにformType:Symfony3.3フォーム名はリクエストに含まれていません

class GetPostType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->setMethod("POST") 
      ->add('phrase', Type\TextType::class); 
    } 
} 

フォームが(これはしかし問題ではありません)任意のエンティティまたは他のオブジェクトにバインドされていないあなたが見ることができるように。今度はそのフォームで受信リクエストを処理しようとすると、次のようになります。

$postForm = $this->createForm(GetPostType::class); 
$postForm->handleRequest($this->request); 

...通常handleRequestは私のフォームを送信する必要があります。ただし、

$postForm->isSubmitted(); 

はfalseです。

私は問題の原因をHttpFoundationRequestHandlerに追跡しました。

} elseif ($request->request->has($name) || $request->files->has($name)) { 

これによれば、私のフォーム名は要求に応じて存在しません。それは私が得ないものです。私は職場でSymfonyフォームを使用していますが、問題はありません。私は別のプロジェクトでそれらを使用し、それは大丈夫だった。今何らかの理由で私は彼らを働かせることができません。それはおそらく明らかなことですが、私はそれを見るためにもう一組の目が必要だと思います。

ご覧のとおり、手動でフォームメソッドを設定しようとしましたが(デフォルトではPOSTにする必要があります)、動作しませんでした。私はキャッシュやものをクリアしました。私はインターネット上で見つけた別のものを試しましたが、運はありません。

私は理由が何かを見つけることができません。どのようなアイデアかもしれませんか?

UPDATE:

コメント欄に要求されたとして、私は私のリクエストオブジェクトのダンプを提供します。 それが正しいことをどのように知っていますか?それはhandleRequestメソッドによって受け入れられ、要求タイプは期待され、正しいデータを含んでいます。フォームによってレンダリングされる実際のフィールドはget_post[phrase]命名され

/var/www/story/src/CodeCraft/BlogBundle/Controller/Api/PostController.php:73: 
object(Symfony\Component\HttpFoundation\Request)[49] 
    public 'attributes' => 
    object(Symfony\Component\HttpFoundation\ParameterBag)[12] 
     protected 'parameters' => 
     array (size=4) 
      '_controller' => string 'CodeCraft\BlogBundle\Controller\Api\PostController::getPostsAction' (length=66) 
      '_route' => string 'blog.api.posts.get' (length=18) 
      '_route_params' => 
      array (size=0) 
       ... 
      '_firewall_context' => string 'security.firewall.map.context.main' (length=34) 
    public 'request' => 
    object(Symfony\Component\HttpFoundation\ParameterBag)[10] 
     protected 'parameters' => 
     array (size=1) 
      'phrase' => string 'xxx' (length=3) 
    public 'query' => 
    object(Symfony\Component\HttpFoundation\ParameterBag)[11] 
     protected 'parameters' => 
     array (size=0) 
      empty 
    public 'server' => 
    object(Symfony\Component\HttpFoundation\ServerBag)[15] 
     protected 'parameters' => 
     array (size=34) 
      'HTTP_CACHE_CONTROL' => string 'no-cache' (length=8) 
      'HTTP_POSTMAN_TOKEN' => string '2eea2285-a2f7-4ca5-a799-ea97758d7d20' (length=36) 
      'CONTENT_TYPE' => string 'application/x-www-form-urlencoded' (length=33) 
      'HTTP_USER_AGENT' => string 'PostmanRuntime/6.1.6' (length=20) 
      'HTTP_ACCEPT' => string '*/*' (length=3) 
      'HTTP_HOST' => string 'story.dev' (length=9) 
      'HTTP_ACCEPT_ENCODING' => string 'gzip, deflate' (length=13) 
      'CONTENT_LENGTH' => string '10' (length=2) 
      'HTTP_CONNECTION' => string 'keep-alive' (length=10) 
      'PATH' => string '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' (length=60) 
      'SERVER_SIGNATURE' => string '<address>Apache/2.4.18 (Ubuntu) Server at story.dev Port 80</address> 
' (length=70) 
      'SERVER_SOFTWARE' => string 'Apache/2.4.18 (Ubuntu)' (length=22) 
      'SERVER_NAME' => string 'story.dev' (length=9) 
      'SERVER_ADDR' => string '192.168.33.10' (length=13) 
      'SERVER_PORT' => string '80' (length=2) 
      'REMOTE_ADDR' => string '192.168.33.1' (length=12) 
      'DOCUMENT_ROOT' => string '/var/www/story/web' (length=18) 
      'REQUEST_SCHEME' => string 'http' (length=4) 
      'CONTEXT_PREFIX' => string '' (length=0) 
      'CONTEXT_DOCUMENT_ROOT' => string '/var/www/story/web' (length=18) 
      'SERVER_ADMIN' => string '[email protected]' (length=19) 
      'SCRIPT_FILENAME' => string '/var/www/story/web/app_dev.php' (length=30) 
      'REMOTE_PORT' => string '57039' (length=5) 
      'GATEWAY_INTERFACE' => string 'CGI/1.1' (length=7) 
      'SERVER_PROTOCOL' => string 'HTTP/1.1' (length=8) 
      'REQUEST_METHOD' => string 'POST' (length=4) 
      'QUERY_STRING' => string '' (length=0) 
      'REQUEST_URI' => string '/app_dev.php/posts' (length=18) 
      'SCRIPT_NAME' => string '/app_dev.php' (length=12) 
      'PATH_INFO' => string '/posts' (length=6) 
      'PATH_TRANSLATED' => string '/var/www/story/web/posts' (length=24) 
      'PHP_SELF' => string '/app_dev.php/posts' (length=18) 
      'REQUEST_TIME_FLOAT' => float 1509896560.734 
      'REQUEST_TIME' => int 1509896560 
    public 'files' => 
    object(Symfony\Component\HttpFoundation\FileBag)[14] 
     protected 'parameters' => 
     array (size=0) 
      empty 
    public 'cookies' => 
    object(Symfony\Component\HttpFoundation\ParameterBag)[13] 
     protected 'parameters' => 
     array (size=0) 
      empty 
    public 'headers' => 
    object(Symfony\Component\HttpFoundation\HeaderBag)[16] 
     protected 'headers' => 
     array (size=10) 
      'cache-control' => 
      array (size=1) 
       ... 
      'postman-token' => 
      array (size=1) 
       ... 
      'content-type' => 
      array (size=1) 
       ... 
      'user-agent' => 
      array (size=1) 
       ... 
      'accept' => 
      array (size=1) 
       ... 
      'host' => 
      array (size=1) 
       ... 
      'accept-encoding' => 
      array (size=1) 
       ... 
      'content-length' => 
      array (size=1) 
       ... 
      'connection' => 
      array (size=1) 
       ... 
      'x-php-ob-level' => 
      array (size=1) 
       ... 
     protected 'cacheControl' => 
     array (size=1) 
      'no-cache' => boolean true 
    protected 'content' => null 
    protected 'languages' => null 
    protected 'charsets' => null 
    protected 'encodings' => null 
    protected 'acceptableContentTypes' => null 
    protected 'pathInfo' => string '/posts' (length=6) 
    protected 'requestUri' => string '/app_dev.php/posts' (length=18) 
    protected 'baseUrl' => string '/app_dev.php' (length=12) 
    protected 'basePath' => null 
    protected 'method' => string 'POST' (length=4) 
    protected 'format' => null 
    protected 'session' => 
    object(Symfony\Component\HttpFoundation\Session\Session)[5070] 
     protected 'storage' => 
     object(Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage)[5071] 
      protected 'bags' => 
      array (size=2) 
       ... 
      protected 'started' => boolean false 
      protected 'closed' => boolean false 
      protected 'saveHandler' => 
      object(Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy)[5090] 
       ... 
      protected 'metadataBag' => 
      object(Symfony\Component\HttpFoundation\Session\Storage\MetadataBag)[5065] 
       ... 
     private 'flashName' => string 'flashes' (length=7) 
     private 'attributeName' => string 'attributes' (length=10) 
    protected 'locale' => null 
    protected 'defaultLocale' => string 'en' (length=2) 
    private 'isHostValid' => boolean true 
    private 'isClientIpsValid' => boolean true 
    private 'isForwardedValid' => boolean true 
+0

は、要求が実際にフォームデータを含まことを確認するには、ブラウザで見てみましたか? cURLリンクを貼り付けることはできますか? (Chromeは、ネットワークタブのリクエストの右クリックメニューでこのオプションを提供していますが、他のブラウザについてはわかりません)また、レンダリングされたフォームを投稿できますか? – ccKep

+0

フォームのデバッグパネルを確認しましたか? –

+0

私はいくつかを明確にする必要があるように感じる。私はこのフォームをレンダリングしません。リクエストを処理するためにAPIエンドポイントで使用しています。多くの理由から、このソリューションは私の場合より効果的です。私は郵便配達員を介してリクエストを送信しています。はい、アプリケーションにアクセスしてデータを取得できます。エンドポイントでデータを使用することができます。フォーム自体は完全にうまくいきます(これは私が何の問題もなくインスタンスを得ることを意味します)。要求を正しく処理していないだけです(ポスト、取得など。メソッドを強制しても)。要求されたデータは含まれていません。 – Robert

答えて

1

だけではなく、phrase。郵便配達員にget_post[phrase]を送信すると機能します。

あなたが例えば、命名スキームあなたのフォームにgetBlockPrefixメソッドをオーバーライドできることをしたくない場合は、次の

<?php 

namespace AppBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 

use Symfony\Component\Form\Extension\Core\Type\TextType; 

class GetPostType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('phrase', TextType::class); 
    } 

    public function getBlockPrefix() 
    { 
     return null; 
    } 
} 
+0

それは素晴らしいです。私が言ったように、私は前にこの問題を抱えていました。素晴らしい仕事!あなたは私の頭の上に残っているものを私の頭の上に保存しました! – Robert

関連する問題