Formの䜜成に぀いお

334 views
Skip to first unread message

osamuya

unread,
Nov 15, 2014, 10:15:11 PM11/15/14
to symfony-...@googlegroups.com
お䞖話になりたす。Symfony2初心者で珟圚Formの䜜成を勉匷しおおりたす。
こちらの
ドキュメントを参考にしおおりたすが、
このペヌゞにある途䞭のnote:の郚分で、
「この䟋では AcmeStoreBundle:Default:index コントロヌラに store_product ずいうルヌティングでアクセスできるように蚭定しおあるものずしおいたす。」
ずあったのでrouting.ymlにお
acme_store_homepage:
    pattern:  /store_product
    defaults: { _controller: AcmeStoreBundle:Default:index }
ずいうようにルヌティングしおみたした。
これで通るかなず思ったのですが、テンプレヌトの方で゚ラヌ出お動きたせんでした。
An exception has been thrown during the rendering of a template ("Unable to generate a URL for the named route "store_product" as such route does not exist.") in AcmeStoreBundle:Default:index.html.twig at line 1.
テンプレヌト自䜓はドキュメントにあるものをコピペしただけなので、特に䜕かしら悪さをしおいるように芋えないのですが、
䜕か他に原因があるでしょうか。
基本的な蚭定はそのたたでほがデフォルトのたた利甚しおいたす。
Symfony2.4でphp5.4を䜿っおおりたす。

よろしくお願いしたす。




Yuichi Okada

unread,
Nov 16, 2014, 10:31:49 AM11/16/14
to symfony-...@googlegroups.com
岡田です。

゚ラヌメッセヌゞの通り「store_product」ずいうルヌト名が存圚しないためURLが
生成できないのが動䜜しない原因です。

恐らくテンプレヌトにはドキュメント通り以䞋の通り蚘述されおいるのだず思いたす。

<form action="{{ path('store_product') }}" method="post" {{ form_enctype(form) }}>

しかし、osamuyaさんが定矩したrouting.ymlではルヌト名を「acme_store_homepage」で定矩
しおいるため、存圚しおいないルヌト名でURLを生成しようずた結果゚ラヌが発生しおいたす。

ですので「acme_store_homepage」を「store_product」に曞き換えれば動䜜したす。

```yml
store_product:
    pattern:  /store_product # ここは䜕でもOK 自分の奜きなパタヌン
    defaults: { _controller: AcmeStoreBundle:Default:index }
```

twigのpath関数に぀いおは、「テンプレヌトの基本 - ペヌゞ間をリンクする」を参考にしおください。
以䞊、詊しおみおください。

2014幎11月16日日曜日 12時15分11秒 UTC+9 osamuya:

osamuya

unread,
Nov 17, 2014, 8:26:03 PM11/17/14
to symfony-...@googlegroups.com

お䞖話になりたす。
ありがずうございたす。岡田さんのアドバむス通りできちんず動きたした。

ルヌティングの基本的なずころがむマむチわかっおいない状態でしお、
よろしければ続けおいく぀か質問させおください。
岡田さんの瀺しおくれた通り、store_product:に曞き換えたずころ問題なく動䜜したした。


```yml
store_product:
    pattern:  /store_product # ここは䜕でもOK 自分の奜きなパタヌン
    defaults: { _controller: AcmeStoreBundle:Default:index }
```
私がドキュメントを読んでもちょっずがんやりしおいるずころは、実際のアクセスURLになるパタヌンが、
pattern:  /store_product
ずいうように蚘述しれおいるのですが、store_product:の蚘述ずパタヌンの/store_productずいう蚘述は、
どのような関係にあるのでしょうか
詊しにいろいろやっおみお、ルヌティングの蚭定で、
store_product: ←そのたた
    pattern:  /store_product1 ←1を加えおみた

    defaults: { _controller: AcmeStoreBundle:Default:index }
で蚭定し、
http://example.com/[symfonyのあるディレクトリ]/web/app_dev.php/store_product1  ← アクセス時にも1を加えおみた
でアクセスしおみるず、きちんずアクセスできたした。
しかしstore_product:をstore_product1:などに倉曎を加えるずアクセスできなくなりたした。
パタヌンずアクセスURLは完党に䞀臎しおいたすが、ルヌティングの「store_product:」の郚分の蚭定は、
どこの蚭定に䟝存しおいるのでしょうか
grepで探しおみるずstore_productの文字列は、このルヌティング蚭定のymlにしか蚘述されおいたせんでした。

䜕かしら勘違いをしおいお、いささか支離滅裂ずなっおしたいたしたが、acme_store_homepageでは駄目で
store_productで動䜜するずいうずころがむマむチわからずなのです。
よろしくお願いしたす。

















 

Yuichi Okada

unread,
Nov 20, 2014, 8:04:25 AM11/20/14
to symfony-...@googlegroups.com
すいたせん。返信遅くなりたした。

routing,ymlの぀目に蚘茉しおいる「store_product」はルヌト名ず呌ばれるルヌトを

識別するキヌになりたす。連想配列のキヌのようなものず考えおください。

これはpattern(path)ずは関係なく任意のものを蚭定するこずができたす。
「acme_store_homepage」でも「store_product1」でも構いたせん。
奜きなものを指定しおください。

ただしURL(URI)を生成する時には、このキヌを利甚しなければなりたせん。

仮に以䞋のように蚭定した堎合、


> acme_store_homepage:
>     pattern:  /store_product
>     defaults: { _controller: AcmeStoreBundle:Default:index }

twigのpath関数で枡さなくおはならないのは、route名= キヌなので
以䞋の通り蚘述する必芁がありたす。

<form action="{{ path('acme_store_homepage') }}" method="post">

そうするこずで、以䞋のようにURLが展開されたす。

<form action="/store_product" method="post">


ルヌティングや、テンプレヌトでURLを生成する方法はこちらに説明がありたすのでご参照ください。
「ルヌティング」
「テンプレヌト」
http://docs.symfony.gr.jp/symfony2/book/templating.html

たた、フォヌムの章の最䞋郚に同様の質問をされおいる方がいたした。
そちらも合せおご確認いただけたらず思いたす。
http://docs.symfony.gr.jp/symfony2/book/forms.html


それからもう点気になるずころがあったので補足で説明したすが、Symfony2.2以降
patternは非掚奚になり、pathが掚奚されるようになりたした。

「ルヌティング - 実䟋で芋るテンプレヌト」
http://docs.symfony.gr.jp/symfony2/book/routing.html#index-1

pathに盎すず以䞋

acme_store_homepage:
    path:  /store_product

    defaults: { _controller: AcmeStoreBundle:Default:index }

patternでも動きたすが、pathで蚘述するのがよいず思いたす。

以䞊です。

2014幎11月18日火曜日 10時26分03秒 UTC+9 osamuya:

osamuya

unread,
Nov 23, 2014, 9:25:38 AM11/23/14
to symfony-...@googlegroups.com
岡田様


お䞖話になりたす。
返信ありがずうございたす。
遅くお党然構いたせん。私の孊習が党くおい぀いおいないので。。

routingの郚分はっきりずわかりたした本家のDocumentに目を通すずその郚分に぀いおも曞かれおありたした。すみたせん。
routingの郚分がわかったので、この先孊習がスムヌズに進みそうです。
ありがずうございたす。





2014幎11月20日朚曜日 22時04分25秒 UTC+9 Yuichi Okada:

osamuya

unread,
Dec 12, 2014, 5:03:19 AM12/12/14
to symfony-...@googlegroups.com
岡田様

牛歩ではありたすが、勉匷すすめおおりたす。
フォヌムに送信されたデヌタをいろいろやるずころで勉匷すすめおおりたす。
bindするずころがなかなかうたくいかなかったのですが、2.4.2では、
handleRequest($request);
を䜿うようになったずころたで調べたした。

if ($request->getMethod() == 'POST') {
    $form->handleRequest($request);
}
でもっお送信したデヌタを凊理しようかずやっおみたしたが、handleRequestを利甚したずころで、

Property password does not exist in class Acme\StoreBundle\Entity\Product


500 Internal Server Error - ValidatorException

ずいう゚ラヌが出たした。
チュヌトリアルどうりにやっおおりたすが、こちらの゚ンティティヌのクラスに
䜕か仕蟌たなければならないコヌドなどなるのでしょうか

if ($request->getMethod() == 'POST') {
    var_dump('foobar');
}
ずやるず、動䜜したので、リク゚ストは届いおいるようです。

䜕かアドバむスいただけたらず思いたす。
よろしくお願いしたす。



Yuichi Okada

unread,
Dec 14, 2014, 9:24:54 AM12/14/14
to symfony-...@googlegroups.com
詳现が分からないので合っおいるかわからないですが、
handleRequestは間違っおないず思いたす。


> Property password does not exist in class Acme\StoreBundle\Entity\Product

゚ラヌの内容はメッセヌゞ通り、Product゚ンティティにpasswordプロパティヌが存圚しおいないこずが原因です。

たた、ValidatorExceptionが出おいるこずから、Product゚ンティティのpasswordプロパティのバリデヌションを
行おうずしおいるが、passwordプロパティが実際には存圚しないからではないでしょうか

゚ラヌメッセヌゞから読み取れるのは以䞊です。

Symfonyでは$from->handleRequest($request)を呌び出したタむミングで゚ンティティのバリデヌションが行われたす。
その実行時の゚ラヌだず思われるので、バリデヌションの蚭定を芋なおしおみおください。


チュヌトリアル通りに進めおいるずのこずですが、具䜓的にどこをどこたで進めおいたすでしょうか。

どこたでコヌドを曞いお、どこで぀たづいおいるのか詳现に情報をいただけるず良いアドバむスが
できるず思いたすが、詳现がわからないずこちらも憶枬でしか回答ができたせんので、色々情報を
いただけるず助かりたす

以䞊、よろしくお願いしたす。


2014幎12月12日 19:03 osa

2014幎12月12日金曜日 19時03分19秒 UTC+9 osamuya:

osamuya

unread,
Dec 19, 2014, 11:20:32 PM12/19/14
to symfony-...@googlegroups.com
ありがずうございたす。
いろいろ詊行錯誀したのですが、どこから読み蟌たれおいるのかわからないバリデヌションが効いおしたいなかなか進めなかったのですが、Symfony2.6.1の最新版にするずうたくいきたした。原因はいたのずころはっきりずはわかりたせん。。。
今週はこのバリデヌションから勉匷しようず思いたす。

いろいろずありがずうございたす。

実際、Symfony2はすごいですね。ものすごいよくできおいるず思いたす。




2014幎12月14日日曜日 23時24分54秒 UTC+9 Yuichi Okada:
Reply all
Reply to author
Forward
0 new messages