Symfony-在哪里存储自定义Form逻辑



我想知道在哪里存储一些与表单相关的自定义代码。我正在编写Symfony应用程序,用户可以在其中添加自己的类别(当然使用表单(。当用户添加其类别时,控制器内的表单代码会检查此表单是否已提交且有效。如果是,则将用户的类别和基于类别名称创建的URI添加到数据库中。现在,整个代码和逻辑存储在addCategory((操作内的CategoryController中。就像下面一样:

public function addCategory(Request $request): Response
{
// create the whole form inside CategoryType class
$form = $this->createForm(CategoryType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$categories = $form->getData();
$categories->setName(preg_replace(
'#s+#', ' ', $categories->getName()));
$categories->setCategoryUri(strtolower(str_replace(
' ', '-', $categories->getName())));
$this->getDoctrine()->getRepository(Categories::class)
->addOneCategory($categories);
return $this->redirectToRoute('flashcard_index');
}
return $this->render('category/add_category.html.twig', [
'form' => $form->createView(),
'slug' => 'Add category'
]);
}

正如你在if语句中看到的那样,我正在写一些代码。首先,用户数据被保存到$categories变量中,接下来我将使用preg_replace()删除多个空间(以防用户在表单字段中输入多个空间(,最后我使用strtolower()str_replace()函数基于类别名称创建URI。

问题是,我不知道将上述逻辑存储在控制器操作中是否是一种好的做法,如果不是,将该逻辑存储在哪里?你能回答我这个问题吗?提前感谢您的回答!

然后,存储逻辑的最佳位置是您所说的控制器外部。你必须问的问题是,"我如何才能以更快、更容易的方式测试我的代码?">

在一个单独的班级里。不是一个千线经理级别,只有一个级别AddCategorieHandler

如果您想要一个解耦的代码,请从form中删除data_class。如果您想从表单中获取数据,只需调用form->getData(),就会得到一个数组。

然后,您可以使用symfony信使组件创建一个message。此消息将与处理程序AddCategorieHandler相关联。

奖励,信使组件可以调用条令来启动交易并为您刷新。

所以。。在你的控制器中,你只需要创建一条消息,使用信使发送它,瞧。

您的AddCategorieHandler具有您想要的所有逻辑,易于测试(无需模拟条令或功能测试。(

如果要删除一个类别,只需创建一个DeleteCategoryHandler即可。

你必须创建很多类,但从长远来看,在一个大项目中,你会很乐意在整个逻辑的2秒内运行2000个测试!

相关内容

  • 没有找到相关文章

最新更新