我正在創建一個小小的QA應用程式。我有一個物體Answer,它與用戶和問題有關。我試圖為Answer制作一個創建表單。我能夠顯示所有答案的串列,但是當涉及到創建一個新的答案時,出現了一個問題。 錯誤
。以下是我的AnswerEntity代碼:
。
namespace AppEntity。
使用 AppRepositoryAnswerRepository。
use DoctrineORMMapping as ORM;
/**。
* @ORMEntity(repositoryClass=AnswerRepository::class)
* @ORMTable(name="answer")
*/
class Answer
{
/**。
* @ORMId
* @ORMGeneratedValue
* @ORMColumn(type="integer")
*/
private $id;
/**。
* @ORMColumn(type="string", length=200)
*/
private $answer_text;
/**。
* @ORMManyToOne(targetEntity=Question::class, inversedBy="answer")
* @ORMJoinColumn(nullable=false)
*/
private $question;
public function getId(): ?int
{
return $this->id。
}
public function getAnswerText(): ?string
{
return $this-> answer_text;
}
public function setAnswerText(string $answer_text) 。void
{
$this-> answer_text = $answer_text;
}
public function getQuestion(): ?Question?
{
return $this-> question;
}
public function setQuestion(? Question $question) 。void: ?
{
$this->question = $question;
}
和AnswerForm的代碼
/**。
*回答型別。
*/
namespace AppForm;
使用 AppEntityAnswer。
使用 SymfonyComponentFormAbstractType。
使用 SymfonyComponent表單擴展核心型別文本型別。
使用 SymfonyComponentFormFormBuilderInterface。
使用 SymfonyComponentOptionsResolverOptionsResolver。
/**。
*類AnswerType。
*/
class AnswerType extends AbstractType
{
/**。
* 構建表單。
*
* 這個方法是為層次結構中的每個型別呼叫的,從最上面的型別開始。
* 最上面的型別。型別擴展可以進一步修改表單。
*
* @see FormTypeExtensionInterface::buildForm()
*
* @param SymfonyComponentFormBuilderInterface $builder 表格生成器
* @param array $options 選項。
*/
public function buildForm(FormBuilderInterface$builder, array $options)。) void: $options.
{
$builder->add(
'AnswerText',
TextType::class,
[
'label' => 'label_answertext',
'required' => true,
'attr' => ['max_length' => 200] 。
]
);
}
/**。
* 配置該型別的選項。
*
* @param SymfonyComponentOptionsResolverOptionsResolver $resolver 選項的決議器。
*/
public function configureOptions(OptionsResolver $resolver) 。void: $resolver.
{
$resolver->setDefaults(['data_class' => Answer::class])。
}
/**。
* 回傳此型別的模板塊名稱的前綴。
*
* 塊的前綴默認為下劃線的短類名,去掉 "Type "后綴。
* 去掉 "Type "后綴(例如:"UserProfileType" => "user_profile")。
*
* @return string 模板塊名稱的前綴
*/
public function getBlockPrefix()。string
{
return 'answer' 。
}
還有答案控制器
/**.
* 回答控制器
*/
namespace AppController;
使用 AppEntityAnswer。
使用 AppEntityQuestion。
使用 AppFormAnswerType。
使用 AppRepositoryAnswerRepository。
使用 SymfonyComponentFormExtensionCoreTypeFormType。
使用 SymfonyComponentHttpFoundationRequest。
使用 SymfonyComponentHttpFoundationResponse。
使用 KnpComponentPagerPaginatorInterface。
使用 SymfonyBundleFrameworkBundleControllerAbstractController。
使用 SymfonyFlexPackageFilter。
use SymfonyComponentRoutingAnnotationRoute。
/**。
* Class AnswerController.
*
* @Route("/answer")
*/
class AnswerController extends AbstractController
{
private $answerRepository;
private $answer;
private $paginator;
/**.
* AnswerController建構式
*
* @param AppRepositoryAnswerRepository $answerRepository 答案庫
* @param KnpComponentPagerPaginatorInterface $paginator
*/
public function __construct(AnswerRepository $answerRepository, PaginatorInterface $paginator)
{
$this-> answerRepository = $answerRepository;
$this-> paginator = $paginator;
}
/**。
* 索引動作。
*
* @param SymfonyComponentHttpFoundationRequest $request HTTP請求。
* @return SymfonyComponentHttpFoundationResponse HTTP回應。
*
* @Route(
* "/",
* methods={"GET"},
* name="answer_index",
* )
*/
public function index(Request $request, PaginatorInterface $paginator, AnswerRepository $answerRepository>)。) Response: Response?
{
$pagination = $paginator-> paginate(
$answerRepository->queryAll()。
$request->query->getInt('page', 1) 。
AnswerRepository::PAGINATOR_ITEMS_PER_PAGE
);
return $this-> render(
'answer/index.html.twig'。
['pagination' => $pagination].
);
}
/**。
* 創建動作。
*
* @param SymfonyComponentHttpFoundationRequest $request HTTP請求。
*
* @param AppRepositoryAnswerRepository $answerRepository 答案倉庫
* @param AppEntityAnswer $answer Answer Entity
*
* @return SymfonyComponentHttpFoundationResponse HTTP response
*
* @throws DoctrineORMORMException
* @throws DoctrineORMOptimisticLockException
*
* @Route(
* "/create",
* methods={"GET", "POST"},
* name="answer_create",
* )
*/
public function create(Request $request, AnswerRepository $answerRepository, Answer $answer)。) Response: Response.
{
$answer = new Answer()。
$form = $this->createForm(AnswerType::class, $answer)。
$form-> handleRequest($request)。
if ($form->isSubmitted() && $form->isValid() {
$answerRepository-> save($answer);
$this->addFlash('success', 'answer_created_successfully') 。
return $this->redirectToRoute('question_index')。
}
return $this-> render(
'answer/create.html.twig'。
['form' => $form-> createView()]
);
}
}
還有,問題是......,如何將answer/create作為問題的答案?我是說,我有localhost/question/{questionid},我想在這里創建問題。
謝謝你的幫助!
uj5u.com熱心網友回復:
你的錯誤是一個ParamConverter錯誤。在你的控制器中,你要求symfony給你一個Answer $answer,但它不能提供,因為沒有辦法做到。你在控制器的方法中不需要這個引數。
另外,我懷疑你的AnswerType會起作用,因為你的屬性名為answer_text而你的欄位名為AnserText。它們必須匹配。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/310770.html
標籤:
