Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 优化——两种相似方法_Php_Design Patterns_Copy Paste_Symfony - Fatal编程技术网

Php 优化——两种相似方法

Php 优化——两种相似方法,php,design-patterns,copy-paste,symfony,Php,Design Patterns,Copy Paste,Symfony,我刚到Symfony,有点小问题。 我一直在网上搜索,找不到问题的答案。 我创建了API,有两个控制器(UserController、InstructorController)和类似的方法(addUserImage、addInstructorImage)。我创建了抽象BaseImage(这里是保存文件)、InstructorImage和UserImage(这里是设置路径)。这是我的控制器: /** * @ApiDoc( * name="addInstructorImage", sectio

我刚到Symfony,有点小问题。 我一直在网上搜索,找不到问题的答案。 我创建了API,有两个控制器(UserController、InstructorController)和类似的方法(addUserImage、addInstructorImage)。我创建了抽象BaseImage(这里是保存文件)、InstructorImage和UserImage(这里是设置路径)。这是我的控制器:

/**
 * @ApiDoc(
 *  name="addInstructorImage", section="Instructors",
 *  description="Add Instructor Image",
 * )
 *
 * @Route("/instructor/{instructor}/image", name="instructors.image.add")
 * @Method("POST")
 *
 * @param Request    $request
 * @param Instructor $instructor
 * @View
 *
 * @return \FOS\RestBundle\View\View
 */
public function addInstructorImage(Request $request, Instructor $instructor)
{
    $this->denyAccessUnlessGranted('edit', $instructor->getUser());
    $image = new InstructorImage();
    $form = $this->get('form.factory')
            ->createNamed('', InstructorImageType::class, $image, ['csrf_protection' => false, 'method' => 'POST']);
    $form->handleRequest($request);

    if ($form->isValid()) {
        $image->setInstructor($instructor);
        $em = $this->getDoctrine()->getManager();
        $em->persist($image);
        $em->flush();

        return $this->view(null, Response::HTTP_NO_CONTENT);
    }

    return $this->view($form, Response::HTTP_BAD_REQUEST);
}
我的第二个控制器是相同的。 唯一的区别是另一个对象和另一种形式。优化此代码的最佳方法是什么。我应该创建添加照片的服务还是使用链处理程序?也许你有更好的主意?
谢谢你的帮助

简短回答:不要浪费时间优化这类东西

您的方法由19行代码组成。它的所有基本锅炉板易于阅读的代码。我知道,每当我看到重复的代码时,我都会尝试以某种方式将其组合起来,但究竟会得到什么呢?把19行减少到15行

如果我要更改您的代码,那么我会尝试将一些业务逻辑转移到它自己的服务中。比如:

InstructorManager::addImage($instructor,$image);
这将摆脱实体管理器锅炉板,并提供一些抽象。虽然该方法所做的只是设置映像并调用flush,但可能会使测试变得更容易一些。不值得这么努力。如果您还需要添加其他管理器类型的功能,那么这可能是值得的。或者,您可能希望能够从控制台应用程序添加图像

当然,将来您可能不再需要添加功能。也许你想在图像更改时通知某人。如果您发现自己需要修改重复的代码,那么您可以证明将公共代码移动到自己的服务中的努力是合理的


我想您可以使用容器的工厂功能为表单创建服务。特别是如果你有一堆这样的表格要做。但同样,这几乎不值得付出努力,甚至可能使维护变得更加困难。

简短回答:不要浪费时间尝试优化这类东西

您的方法由19行代码组成。它的所有基本锅炉板易于阅读的代码。我知道,每当我看到重复的代码时,我都会尝试以某种方式将其组合起来,但究竟会得到什么呢?把19行减少到15行

如果我要更改您的代码,那么我会尝试将一些业务逻辑转移到它自己的服务中。比如:

InstructorManager::addImage($instructor,$image);
这将摆脱实体管理器锅炉板,并提供一些抽象。虽然该方法所做的只是设置映像并调用flush,但可能会使测试变得更容易一些。不值得这么努力。如果您还需要添加其他管理器类型的功能,那么这可能是值得的。或者,您可能希望能够从控制台应用程序添加图像

当然,将来您可能不再需要添加功能。也许你想在图像更改时通知某人。如果您发现自己需要修改重复的代码,那么您可以证明将公共代码移动到自己的服务中的努力是合理的


我想您可以使用容器的工厂功能为表单创建服务。特别是如果你有一堆这样的表格要做。但同样,这几乎不值得付出努力,甚至可能使事情变得更难以维护。

我想这个问题更适合-以防你在这里得不到一个好答案。@Jurik在提到其他网站时,指出Wojciech当然应该立即删除这个未回答的问题通常是有帮助的@gnat-如果您可以将其标记为迁移,这将很有帮助。我想这个问题更适合-以防您在这里没有得到好的答案。@Jurik在引用其他网站时,指出Wojciech当然应该立即删除这个未回答的问题,这通常是有帮助的@gnat—如果您可以将其标记为迁移,这将非常有用。