ヘッドアップ - 私はすでに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
は、要求が実際にフォームデータを含まことを確認するには、ブラウザで見てみましたか? cURLリンクを貼り付けることはできますか? (Chromeは、ネットワークタブのリクエストの右クリックメニューでこのオプションを提供していますが、他のブラウザについてはわかりません)また、レンダリングされたフォームを投稿できますか? – ccKep
フォームのデバッグパネルを確認しましたか? –
私はいくつかを明確にする必要があるように感じる。私はこのフォームをレンダリングしません。リクエストを処理するためにAPIエンドポイントで使用しています。多くの理由から、このソリューションは私の場合より効果的です。私は郵便配達員を介してリクエストを送信しています。はい、アプリケーションにアクセスしてデータを取得できます。エンドポイントでデータを使用することができます。フォーム自体は完全にうまくいきます(これは私が何の問題もなくインスタンスを得ることを意味します)。要求を正しく処理していないだけです(ポスト、取得など。メソッドを強制しても)。要求されたデータは含まれていません。 – Robert