php - 如何在 Symfony 的控制器中包含 php 代码?
问题描述
在我的控制器中,我有很多“使用”语句:
控制器.php
namespace App\Controller;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer;
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\Query\ResultSetMapping;
use App\Repository\PagesRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use App\Form\Type\ColorSelectorType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
为了清理我的代码,我想把它们放在另一个页面上,比如服务。
一种方法是将代码放在 Namespace.php 页面上并包含它:
include 'App\Service\Namespace.php';
但我收到错误消息:
警告:包括(App\Service\Namespace.php):无法打开流:没有这样的文件或目录
解决方案
错误的直接原因是您使用相对路径来包含文件。例如,始终使用绝对路径__DIR__
。
但即使你提供了正确的路径,这仍然行不通。您不能将use
语句移动到另一个文件。这些语句始终在当前文件的范围内有效,而在其他任何地方都无效。
但是,您希望通过减少use
语句的数量来清理您的类,这很好。当你的课堂上有这么多use
陈述时,这表明课堂变得庞大而混乱,并且随着时间的推移将变得越来越难以维护。可以通过将类拆分为更小的类来解决此问题。例如,您可以将使用所有这些Symfony\Component\Form
类的所有位置提取到一个新的表单类型类中,并仅使用这一个表单类型,而不是在控制器中构建整个表单。
推荐阅读
- python - 在python中创建一个类列表,其中包含一个类列表
- r - 如何对R中文件夹中的每个文件执行相同的功能?
- android - 为什么我的撇号没有正确显示?
- python - pandas:带有 loc[] 的 NaN 结果
- lua - 尝试在 Lua 中重置游戏
- javascript - 仅使用 Javascript 或 Jquery 从图像中提取多个图像,而不使用 CSS
- python - DeepSpeech 安装错误:“ImportError:DLL 加载失败:找不到指定的模块。”
- kubernetes - 如何在 AWS EC2 中设置的 kubernetes 仪表板中将 keycloak 部署为 pod?
- java - 如何在 IntelliJ IDEA 中启用 Java 14 记录?
- excel - 在多行数据的列中查找最后一个活动单元格