代码之家  ›  专栏  ›  技术社区  ›  treyBake user1850175

phpunit\framework\testcase未找到symfony 4

  •  2
  • treyBake user1850175  · 技术社区  · 7 年前

    我正在尝试将窗体添加到控制器,但它只返回以下错误:

    致命错误:在第21行的/var/www/site/vendor/symfony/form/test/formintegrationtestcase.php中找不到类“phpunit\framework\testcase”

    不过,我不太清楚为什么。乍一看,似乎没有找到普普尼特,而是在跑。 cat composer.json 在我的目录里,不是这样说的:

    {
        "type": "project",
        "license": "proprietary",
        "require": {
            "php": "^7.1.3",
            "ext-iconv": "*",
            "sensio/framework-extra-bundle": "^5.1",
            "symfony/apache-pack": "^1.0",
            "symfony/asset": "^4.1",
            "symfony/console": "^4.1",
            "symfony/expression-language": "^4.1",
            "symfony/flex": "^1.0",
            "symfony/form": "^4.1",
            "symfony/framework-bundle": "^4.1",
            "symfony/lts": "^4@dev",
            "symfony/monolog-bundle": "^3.1",
            "symfony/orm-pack": "^1.0",
            "symfony/process": "^4.1",
            "symfony/security-bundle": "^4.1",
            "symfony/serializer-pack": "*",
            "symfony/swiftmailer-bundle": "^3.1",
            "symfony/twig-bundle": "^4.1",
            "symfony/validator": "^4.1",
            "symfony/web-link": "^4.1",
            "symfony/webpack-encore-pack": "*",
            "symfony/yaml": "^4.1"
        },
        "require-dev": {
            "symfony/debug-pack": "*",
            "symfony/dotenv": "^4.1",
            "symfony/maker-bundle": "^1.5",
            "symfony/phpunit-bridge": "^4.1",
            "symfony/profiler-pack": "*",
            "symfony/test-pack": "^1.0",
            "symfony/web-server-bundle": "^4.1"
        },
        "config": {
            "preferred-install": {
                "*": "dist"
            },
            "sort-packages": true
        },
        "autoload": {
            "psr-4": {
                "App\\": "src/"
            }
        },
        "autoload-dev": {
            "psr-4": {
                "App\\Tests\\": "tests/"
            }
        },
        "replace": {
            "symfony/polyfill-iconv": "*",
            "symfony/polyfill-php71": "*",
            "symfony/polyfill-php70": "*",
            "symfony/polyfill-php56": "*"
        },
        "scripts": {
            "auto-scripts": {
                "cache:clear": "symfony-cmd",
                "assets:install %PUBLIC_DIR%": "symfony-cmd"
            },
            "post-install-cmd": [
                "@auto-scripts"
            ],
            "post-update-cmd": [
                "@auto-scripts"
            ]
        },
        "conflict": {
            "symfony/symfony": "*"
        },
        "extra": {
            "symfony": {
                "allow-contrib": "true"
            }
        }
    }
    

    所以我可以在那里看到…这是我的控制器:

    <?php
        namespace App\Controller\Bug;
    
        use App\Entity\Bug;
        use App\Form\Bug\AddType;
        use Symfony\Bundle\FrameworkBundle\Controller\Controller;
        use Symfony\Component\HttpFoundation\Request;
    
        class AddController extends Controller
        {
            public function add(Request $request, \Swift_Mailer $mailer)
            {
                # I know setting errors this way isn't best
                # but was faced with White Screen of Death
                ini_set('display_startup_errors', 1);
                ini_set('display_errors', 1);
                error_reporting(-1);
    
                $bug = new Bug();
    
                $form = $this->createForm(AddType::class, $bug);
                $form->handleRequest($request);
    
                $user = $this->getUser();
    
                if ($form->isSubmitted() && $form->isValid()) {
                    $em = $this->getDoctrine()->getManager();
    
                    $bug->setCreatedTs(new \DateTime());
                    $bug->setSubmittedBy($user);
                    $bug->setStatus('new');
    
                    try {
                        $em->persist($bug);
                        $em->flush();
    
                        $this->addFlash('success', 'Bug Submitted.');
    
                        $message = (new \Swift_Message('Incoming Bug'))
                            ->setTo('t.taylor@sinnis.co.uk')
                            ->setBody(
                                $this->renderView(
                                    'emails/bugs/add.html.twig',
                                    array(
                                        'bug' => $bug,
                                        'submitted_by' => $user
                                    )
                                ),
                                'text/html'
                            );
    
                        $mailer->send($message);
                    } catch (\Exception $e) {
                        $this->addFlash('danger', 'Processing Error. Please try again.');
                    }
    
                    return $this->redirectToRoute('bug_add');
                }
    
                return $this->render('bug/add.html.twig', array('form' => $form->createView()));
            }
        }
    

    我的FormType:

    <?php
        namespace App\Form\Bug;
    
        use App\Entity\Bug;
        use Symfony\Component\Form\AbstractType;
        use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
        use Symfony\Component\Form\Extension\Core\Type\TextareaType;
        use Symfony\Component\Form\FormBuilderInterface;
        use Symfony\Component\Form\Tests\Extension\Core\Type\TextTypeTest;
        use Symfony\Component\OptionsResolver\OptionsResolver;
    
        class AddType extends AbstractType
        {
            public function buildForm(FormBuilderInterface $builder, array $options)
            {
                $builder->add('summary', TextTypeTest::class)
                    ->add('description', TextareaType::class)
                    ->add('priority', ChoiceType::class, array(
                        'choices' => array(
                            'Low' => 'low',
                            'Medium' => 'medium',
                            'High' => 'high',
                            'Site Breaking' => 'extreme'
                        )
                    ))
                    ->add('website', ChoiceType::class, array(
                        'choices' => array(
                            'Site One' => 'site-one',
                            'Site Two' => 'site-two',
                            'Site Three' => 'site-three'
                        )
                    ));
            }
    
            public function configureOptions(OptionsResolver $resolver)
            {
                $resolver->setDefaults(array());
            }
        }
    

    我的twig文件只是表单的基本实现:

    {{ form_start(form) }}
    {{ form_widget(form) }}
    {{ form_end(form) }}
    

    我不知道为什么会发生这个错误,也不知道如何阻止它?我不想跟普普尼特过不去,但它却在这里抬起它丑陋的头。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Alessandro Minoccheri    7 年前

    我觉得你有个问题:

    $builder->add('summary', TextTypeTest::class)
    

    你得把它改成

    $builder->add('summary', TextType::class)
    

    所以你可以删除这个用法

    use Symfony\Component\Form\Tests\Extension\Core\Type\TextTypeTest;
    

    再加上这个:

    use Symfony\Component\Form\Extension\Core\Type\TextType;
    
    推荐文章