У меня есть запросы формы под названием SignupRequest, которые содержат следующий код:
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'name_user' => 'required|min:5|max:100',
'cellphone' => 'required|min:15|max:15',
'email' => 'required|min:5|max:100|email:rfc,dns|unique:users,email_address',
'password' => 'required|min:6|max:100|confirmed',
];
}
В моем контроллере я настроил метод POST под названием signup:
public function signup(SignupRequest $request){
$allRequests = $request->all();
echo 'Great!';
}
Если я установлю возврат на false в authorize method и попытаюсь вызвать URL-адрес через запрос POST (с приложением почтальона), будет возвращена ошибка несанкционированной операции.
Если я установлю true и попытаюсь сделать запрос POST (с приложением postman) без каких-либо параметров, я получу ответ JSON:
{ "успех": правда }
Разве не правильно было бы обвинить, каких полей не хватает? Что я делаю не так?
ОБНОВЛЯТЬ:
Я использую laravel в качестве REST API.
В этом случае у меня есть эти два маршрута, объявленные в файле api.php:
/* ROUTES FOR USER */
Route::post('/users/signup', [App\Http\Controllers\Api\UserController::class, 'signup']);
/* DEFAULT ROUTE */
Route::get('/', function(){
return response()->json([
'success' => true
]);
});
В конце концов я обнаружил, что это сообщение об успехе связано с маршрутом типа GET, который был объявлен внутри файла api.php. Несмотря на это, всякий раз, когда я вызываю маршрут с помощью метода POST, запрос, кажется, перенаправляется на маршрут GET, есть ли проблема в Laravel по этому поводу?
Запрос @AJZack будет проверен автоматически с помощью пользовательского класса запроса.
В конце концов я обнаружил, что это сообщение об успехе связано с маршрутом типа GET, который был объявлен внутри файла api.php. Несмотря на это, всякий раз, когда я вызываю маршрут с помощью метода POST, запрос, кажется, перенаправляется на маршрут GET, есть ли проблема в Laravel по этому поводу? Я обновляю сообщение для получения дополнительных объяснений.
Первое, что нужно проверить: используете ли вы laravel по умолчанию .htaccess?
вы используете @method('post') / method = "POST" в вашем представлении?
@AJZack, нет, я не использую этот проект для просмотра, это всего лишь REST API. Весь код, который у меня есть, вы можете увидеть в вопросе. конфигурация laravel по умолчанию. Я просто удаляю Route::middleware('web') из RouteServiceProvider.php и удаляю строку ->prefix('API') из Route::middleware('api').






Если вы используете запрос API, вам необходимо установить заголовок.
Accept: application/json
Теперь Laravel будет знать, что запрос является API, и вернет ответ JSON.
SignupRequest.php
class SignupRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\Rule|array|string>
*/
public function rules(): array
{
return [
'name_user' => 'required|min:5|max:100',
'cellphone' => 'required|min:15|max:15',
'email' => 'required|min:5|max:100|email:rfc,dns|unique:users,email_address',
'password' => 'required|min:6|max:100|confirmed',
];
}
}
UserController.php
class UserController extends Controller
{
public function index(SignupRequest $request)
{
$validated = $request->validated();
return response()->json([
'status' => true,
'data' => $validated,
]);
}
}
Успешный ответ
Ответ об ошибке проверки
Примечание:
confirmed, вам нужно будет добавить password_confirmation поле ввода для подтверждения пароля.
Я думаю, вы не вызываете $request->validate() на входах