문제

내가 노력하고 메소드를 호출의 내 API 그러나 내가 이것을 얻을 제외:

FatalErrorException: Error: Call to undefined method 
Project\Bundle\ApiBundle\Controller\UserController::userCreate() in
Symfony/src/Project/Bundle/UserBundle/Controller/UserController.php line 56

내가 하려고 전화하는 방법을 내기 위한 API 를 사용자 만들기 위해서 반복하지 않 같은 코드가 두 번.API 를 사용하는 모바일 장치입니다.브라우저에서,사용자 등록을 시도하고,그것은 경로를 호출하는 API 는 사용자 만들기.그것은 내가 무엇을 하려고...

면 내가 직접 전화 URL api 에 대한 사용자 만들기,그것은 완벽하게 작동합니다.app_dev.php/api/user/create 하지만 내가 이 메소드를 호출에 콘트롤러는 다음과 같은 여기:

public function registerAction()
{
  $apiUserController = new \Moodress\Bundle\ApiBundle\Controller\UserController;
  $answer = $apiUserController->userCreate();
  return $this->redirect($this->generateUrl('moodress_home'));
} 

그는 찾을 수 없 내 userCreate 방법에 UserController...

여기에 내 UserController:

class UserController extends Controller
{
    /**
    * @Post("/user/create")
    */
    public function userCreateAction()
    {
    $userManager  = $this->get('fos_user.user_manager');
    $jsonErrorCreator = $this->get('moodress_api.create_error_json');

    $user         = $userManager->createUser();
    $user->setEnabled(true);
    $request      = $this->get('request');
    $name         = $request->request->get('name');
    $email        = $request->request->get('email');
    $password     = $request->request->get('password');
    $verification = $request->request->get('verification');

    // We check if all parameters are set
    $code = 0;
    if ($name === null)                                        $code = 200;
    else if ($email    === null)                               $code = 201;
    else if ($password === null)                               $code = 202;
    else if ($verification === null)                           $code = 203;
    else if ($password !== $verification)                      $code = 204;
    else if ($userManager->findUserByUsername($name) !== null) $code = 205;
    else if ($userManager->findUserByEmail($email)   !== null) $code = 206;
     if ($code != 0)
                return ($jsonErrorCreator->createErrorJson($code, null));
    // We set parameters to user object
    $user->setUsername($name);
    $user->setEmail($email);
    $encoder = $this->get('security.encoder_factory')->getEncoder($user);
    $password_user = $encoder->encodePassword($password, $user->getSalt());
    $user->setPassword($password_user);

    $clientManager = $this->get('fos_oauth_server.client_manager.default');
    $client = $clientManager->createClient();
    $client->setRedirectUris(array('http://localhost:8888/app_dev.php'));
    $client->setAllowedGrantTypes(array('token', 'authorization_code'));
    $clientManager->updateClient($client);

    $user->setClient($client);
    // We save the user in the database
    $userManager->updateUser($user);

    // We use the json service for returning the data
    $jsonCreator = $this->get('moodress_api.create_json');
    $response = $jsonCreator->createJson($user);
    return $response;
}

기 위해 노력하고 있을 뿐입니다 call API 방법이 다시 얻을 결과를...는 가장 좋은 방법은 무엇입을 위한 메소드를 호출하의 FOSRestBundle?

감사

도움이 되었습니까?

해결책

솔루션:

당신은 아마 더 나은 사용 다음과 같다:

$response = $this->forward('AcmeYourBundle:User:userCreate', array());
// modify the response

return $response;

설명:

당신을 호출하려고 비 existant 작업입니다.

public function userCreateAction() { /* ... */ }

...해야 하는 이라는 다음과 같다:

$answer = $apiUserController->userCreateAction();

...대

$answer = $apiUserController->userCreate();

을 만들지 않 컨트롤러 개체를 수동으로:

더할 수 없을 만든 새로운 컨트롤러 개체고 그것을 사용하는 즉시

$controller = new \Moodress\Bundle\ApiBundle\Controller\UserController();

당신이 필요하에 최소 주입에 대한 컨테이너 $this->get('...') 전화 작업:

$controller->setContainer($this->container);

해야 합 많 리팩터 코드 하지만...작업입니다 방법 너무 뚱뚱하다.

tips:

으로 당신은 것을 보는 새로운 시도로 심포-여기에는 다른 몇 가지 팁:

  • 을 만들어야 합 로그인 형태의 유형 및 사용하는 대신 이의를 얻는 데이터 요청에서 직접(또는 사용이 이미 하나에 의해 제공됩 FOSUserBundle)
  • 해야 합 추가 유효성 검사 메타데이터의 사용자 등과 유효성을 검사를 사용하는 유효성 검사(서비스의 사용자 검사-맵핑을 이미 제공 FOSUserBundle)
  • JsonResponse 를 사용할 수 있는 클래스
  • HTTP 상태코드 상수에서 요청하는 클래스를 사용할 수 있는

다만 다음과 같은 명령을 사용합니다.

use Symfony\Component\HttpFoundation\JsonResponse;

return new JsonResponse($data, JsonResponse::HTTP_OK); // 200
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top