PHPフレームワークSymfony2 開発チュートリアルをSymfony2.3.9でやった時に引っかかるところ
バージョンによる違いや、ミスと思われるところがいくつかあったので書いておきます。
PHPフレームワークSymfony2 開発チュートリアル
1.5セッションの導入
bindRequestとなっているところをbindに変える
いくつかあります。
adressActionとadressPostActionについては、「同様の変更」とだけ書かれていて、具体的なコードが乗っていません。
しかし、product_idとquantityをただname,adress,phoneに変えただけでは一つ目のページのsessionが2つ目のsessionに上書きされてしまいます。
そこで、
$this->container->get('session')->set('drinkOrder',new drinkOrder());
をsetではなく、
$this->container->get('session')->get('drinkOrder');
にする必要があります。
Resources/views/DrinkOrder/confirmation.html.twig
の最後の行に
<form action="{{ path('OscDrinkOrderBundle_product') }}" method="post" {{ form_enctype(form) }}>
とありますが、正しくは
<form action="{{ path('OscDrinkOrderBundle_confirmation') }}" method="post" {{ form_enctype(form) }}>
でしょう。
use Symfony\Component\Form\FormBuilder;
となっているところは、
use Symfony\Component\Form\FormBuilderInterface;
に。また、これと合わせて
public function buildForm(FormBuilder $builder, array $options)
となっているところを
public function buildForm(FormBuilderInterface $builder, array $options)
に変更。
Formを別の場所に書く部分では、
ProductPostAction
$form = $this->createFormBuilder(new DrinkOrder())
->add('product_id', 'choice', array( 'choices' => array('1' => 'BlueBull 128個入ケース', '2' => 'GreenBull 128個入ケース')))
->add('quantity', 'text')
->getForm();
を
$form = $this->createForm(new ProductDrinkOrderType(),$this->container->get('session')->get('drinkOrder'));
に
AdressPostActionも
$form = $this->createFormBuilder($this->container->get('session')->get('drinkOrder'))
->add('name','text')
->add('adress','text')
->add('phone','text')
->getForm();
を
$form = $this->createForm(new AdressDrinkOrderType(),$this->container->get('session')->get('drinkOrder'));
に変更しないと、confirmで内容が表示されません。
set('state', self::STATE_CONFIRMATION);
getがgetFlashになっていたする。
この場面でflashは使っていないと思う。
PHPフレームワークSymfony2 開発チュートリアル
1.5セッションの導入
bindRequestとなっているところをbindに変える
いくつかあります。
1.5.1オブジェクトの登録
productActionと、productPostActionについてのみコードが書かれていて、adressActionとadressPostActionについては、「同様の変更」とだけ書かれていて、具体的なコードが乗っていません。
しかし、product_idとquantityをただname,adress,phoneに変えただけでは一つ目のページのsessionが2つ目のsessionに上書きされてしまいます。
そこで、
$this->container->get('session')->set('drinkOrder',new drinkOrder());
をsetではなく、
$this->container->get('session')->get('drinkOrder');
にする必要があります。
Resources/views/DrinkOrder/confirmation.html.twig
の最後の行に
<form action="{{ path('OscDrinkOrderBundle_product') }}" method="post" {{ form_enctype(form) }}>
とありますが、正しくは
<form action="{{ path('OscDrinkOrderBundle_confirmation') }}" method="post" {{ form_enctype(form) }}>
でしょう。
use Symfony\Component\Form\FormBuilder;
となっているところは、
use Symfony\Component\Form\FormBuilderInterface;
に。また、これと合わせて
public function buildForm(FormBuilder $builder, array $options)
となっているところを
public function buildForm(FormBuilderInterface $builder, array $options)
に変更。
Formを別の場所に書く部分では、
ProductPostAction
$form = $this->createFormBuilder(new DrinkOrder())
->add('product_id', 'choice', array( 'choices' => array('1' => 'BlueBull 128個入ケース', '2' => 'GreenBull 128個入ケース')))
->add('quantity', 'text')
->getForm();
を
$form = $this->createForm(new ProductDrinkOrderType(),$this->container->get('session')->get('drinkOrder'));
に
AdressPostActionも
$form = $this->createFormBuilder($this->container->get('session')->get('drinkOrder'))
->add('name','text')
->add('adress','text')
->add('phone','text')
->getForm();
を
$form = $this->createForm(new AdressDrinkOrderType(),$this->container->get('session')->get('drinkOrder'));
に変更しないと、confirmで内容が表示されません。
1.8 ページフローの制御とCSRF対策
でset('state', self::STATE_CONFIRMATION);
等のsetが
何故かsetFlashになっていたり、getがgetFlashになっていたする。
この場面でflashは使っていないと思う。
そろそろsyntaxhighliter導入しようかな…
コメント