フォームタイプに基づいてSymfony2にフォームを保存したいのに、save()
メソッドが見つかりません。フォームはSymfony2に保存されません
エラーメッセージは次のとおりです。
Fatal error: Call to undefined method Symfony\Component\Form\Form::save() in C:\xampp\htdocs\Xq\src\Xq\LogBundle\Controller\LogController.php on line 44
次のようにメソッドを保存呼び出しコントローラはなります
<?php
namespace Xq\LogBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\HttpFoundation\Request;
use Doctrine\ORM\EntityRepository;
use Xq\LogBundle\Entity\Call;
use Xq\LogBundle\Form\Type\CallType;
class LogController extends Controller
{
public function callAction(Request $request)
{
#create call object
$call = new Call();
$now = new \DateTime("now");
$call->setTimestamp($now);
$call_form = $this->createForm(new CallType(), $call);
#check form input
$request = $this->get('request');
if ($request->getMethod() == 'POST')
{
$call_form->bindRequest($request);
if ($call_form->isValid())
{
**$saved_call = $call_form->save();**
}
}
return $this->render('XqLogBundle:log:call.html.twig', array('call_form'=>$call_form->createView()));
}
}
?>
CallTypeがは以下のように定義されます。
<?php
namespace Xq\LogBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
class CallType extends AbstractType
{
public function buildForm(Formbuilder $builder, array $options)
{
//here all fields are defined, and they are rendered fine
}
public function getDefaultOptions(array $options)
{
return array('data_class' => 'Xq\LogBundle\Entity\Call');
}
public function getName()
{
return 'callform';
}
}
?>
そして最後にエンティティクラス "Call"もあります。
<?php
#ORM mapping of a call
namespace Xq\LogBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
*
* Xq\LogBundle\Entity\Call
*
* @ORM\Table(name="calls")
* @ORM\Entity
*/
class Call
{
#id of the call
/**
* @ORM\Id
* @ORM\Column(type="integer", length="7")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
#caller
/**
* @ORM\Column(name="caller", type="integer", length="3", nullable="false")
* @ORM\OneToOne(targetEntity="caller")
* @Assert\type(type="Xq\LogBundle\Entity\Caller")
*/
protected $caller;
// and so on ....
#getters and setters
/**
* Get id
*
* @return integer $id
*/
public function getId()
{
return $this->id;
}
// and so on...
}
なぜ保存方法が見つからないのですか? bind()
メソッドはエラーをトリガーしないので、私は推測できる有効なフォームオブジェクトが存在する必要があります。
ありがとうございましたelnurさん、ありがとうございました。実際にこの問題を解決しました。このコードスニペットはForms and Doctrineセクションから抜粋したものです。 私はSymfony2のマニュアルが$ form-> save()を書く理由を理解できませんが、私はここで2つの別々の概念について混乱させなければならない。 –