symfony4.3 не может использовать ValidatorInterface в контроллере при использовании ajax - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь проверить форму, отправленную с помощью ajax в моем контроллере, используя ValidatorInterface.

Но я получаю эту ошибку:

Не удалось разрешить аргумент $ validator для "App \ SocialStudio \ AdminBundle"\ Controller \ InfluencersController :: addinfluencerajax () ", может быть, вы забыли зарегистрировать контроллер в качестве службы или пропустили его пометку" controller.service_arguments "?

Это мой контроллер:

<?php
namespace App\SocialStudio\AdminBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use App\Entity\Influencer;
use App\Form\Type\InfluencerType;

use Symfony\Component\Validator\Validator\ValidatorInterface;

class InfluencersController extends AbstractController
{
    public function Influencers(Request $request)
    {   
        // Get all Inlfuencers
        $influencers = $this->getDoctrine()
            ->getRepository(Influencer::class)
            ->findAll();

        // create modal form
        $influencer = new Influencer();
        $addInfluencerForm = $this->createForm(InfluencerType::class, $influencer);

        return $this->render('@Admin/influencers.html.twig', [
            'menu' => 'influencers',
            'influencers' => $influencers,
            'addInfluencerForm' => $addInfluencerForm->createView(),
        ]);

    }

    public function addInfluencerAjax(Request $request, ValidatorInterface $validator)
    {   

        ... form handling happens in this function ...

    }

}

Это мой код для вызова ajax:

$('#submitAddInfluencerForm').click(function(e){
           e.preventDefault();
            addInfluencerForm = $('#addInfluencerForm').serialize();

            $.ajax({
                url:'{{ path('AddInfluencerAjax') }}',
                type: "GET",
                dataType: "json",
                data: {
                    "influencer": addInfluencerForm
                },
                async: true,
                success: function (return_data)
                {
                    ...
                }
            });

        });

services.yaml

services:
  _defaults:
    autowire: true
    autoconfigure: true

  App\:
    resource: '../src/*'
    exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'

  App\Controller\:
    resource: '../src/Controller'
    tags: ['controller.service_arguments']

, и я поместил это в мой framework.yaml

framework:
   validation: { enable_annotations: true }

`

1 Ответ

0 голосов
/ 06 ноября 2019

С помощью Лепрекона я нашел способ, который работает.

Добавьте в класс контроллера:

private $validator;
    public function __construct(
        ValidatorInterface $validator
    ) {
        $this->validator = $validator;
    }

и получите валидатор в функции следующим образом:

$validator = $this->validator;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...