Я пытаюсь проверить форму, отправленную с помощью 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 }
`