Подтвердить что ты не робот

REST API в Laravel при проверке запроса

В настоящее время я пытаюсь создать RESTful API с Laravel, и сейчас я в процессе создания нового пользователя. Это всего лишь тест, и я получаю некоторый результат при попытке подтвердить запрос с использованием валидации в Laravel; вот результат:

enter image description here

Я пытаюсь создать новый по этому коду:

public function store()
{

    $validation = Validator::make(Request::all(),[ 
        'username' => 'required|unique:users, username',
        'password' => 'required',
    ]);

    if($validation->fails()){


    } else{
            $createUser = User::create([
                'username' => Request::get('username'),
                'password' => Hash::make(Request::get('password')) 
            ]);
    }
}

но тогда я не знаю, как вернуть ошибку при проверке. Но он продолжает давать мне этот HTML-код, как показано на изображении, когда я пытался сделать if с validation->fails(). Есть ли способ получить подтверждение в формате JSON?

4b9b3361

Ответ 1

Вероятно, вы должны возвращать ошибки (который является экземпляром Illuminate\Support\MessageBag) и кодировать это. Экземпляр MessageBag позволяет преобразовать его непосредственно в его представление JSON.

$errors = $validation->errors();

return $errors->toJson();

Теперь, чтобы не использовать собственный рожок, но недавно я разработал пакет API RESTful для Laravel, который делает все это для вас, и все, что вам нужно сделать, это простое исключение. Посмотрите мой dingo/api пакет и Wiki на возвращающие ошибки. В принципе, вместо того, чтобы возвращать ошибки, вы выбрали исключение.

throw new Dingo\Api\Exception\StoreResourceFailedException('Could not create a new user.', $validation->errors());

Он будет представлен следующим JSON.

{
    "message": "Could not create a new user.",
    "errors": {
        "username": ["The username is already in use."]
    }
}

Ответ 2

этот код поможет вам, работая для меня.

$response = array('response' => '', 'success'=>false);
$validator = Validator::make($request->all(), $rules);
    if ($validator->fails()) {
        $response['response'] = $validator->messages();
    }else{
//process the request
}
return $response;

Ответ 3

Laravel предоставляет из окна метод проверки, который вы можете вызывать из своего контроллера.

если вы проверите абстрактный класс Laravel Controller, вы обнаружите, что он использует признак ValidatesRequests

   abstract class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}

Таким образом, вы можете использовать метод $this->validate(Request $request, array $rules);, поскольку ваш класс контроллера расширяет Controller

полное объявление метода

public function validate(Request $request, array $rules, array $messages = [], array $customAttributes = [])
    {
        $validator = $this->getValidationFactory()->make($request->all(), $rules, $messages, $customAttributes);

        if ($validator->fails()) {
            $this->formatValidationErrors($validator);
        }
    }

Если метод проверки $не работает, метод будет вызывать ошибку в зависимости от типа запроса, если это ajax (в этом случае вы должны включить в заголовки запроса (Accept application/json), он вернет ответ JSON, содержащий проверку ошибки.