Как я могу включить php-код в мой контроллер в Symfony? - PullRequest
0 голосов
/ 08 октября 2019

В моем контроллере у меня так много операторов "использования":

Controller.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';

Но я получаю сообщение об ошибке:

Предупреждение: include (App \ Service \ Namespace.php): не удалось открыть поток: нет такого файла или каталога

1 Ответ

4 голосов
/ 08 октября 2019

Непосредственной причиной вашей ошибки является то, что вы используете относительный путь для включения файла. Например, всегда используйте абсолютные пути с __DIR__.

Но даже если вы укажете правильный путь, это все равно не сработает. Вы не можете переместить use заявления в другой файл. Эти операторы всегда работают в области текущего файла, и нигде больше.

Однако хорошо, что вы хотите очистить свой класс, сократив количество операторов use. Если в вашем классе так много use утверждений, это показатель того, что класс становится большим и грязным и со временем будет становиться все более и более неуправляемым. Исправить это можно, разделив класс на более мелкие. Например, вы можете извлечь все места, которые используют все эти Symfony\Component\Form классы, в новый класс Form Type и использовать только этот один Form Type вместо построения всей формы в контроллере.

...