I'm new to Laravel and making an API. In my project, data validation using the queries I created does not work. When I try, for example, to create a user with empty fields, I get the main page with the status 200. Please tell me how I can fix this error. I'll show you the route api.php and one of the controllers where the request I created is applied.
AuthController:
<?php
namespace App\Http\Controllers;
use App\Http\Requests\UserCreateRequest;
use App\Http\Requests\UserLoginRequest;
use Egulias\EmailValidator\Exception\AtextAfterCFWS;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\Builder;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
use phpDocumentor\Reflection\DocBlock\Tags\Uses;
class AuthController extends Controller
{
public function store(UserCreateRequest $request){
$user = new User();
$user->login = $request->get('login');
$user->password = Hash::make($request->get('password'));
$user->fio = $request->get('fio');
$user->email = $request->get('email');
$user->number_phone = $request->get('number_phone');
$user->assignRole('user');
if (!$user->save()) {
return response()->json(['message'=>'Регистрация не удалась'], 422);
}
return response()->json(['message'=> 'Регистрация прошла успешно'], 200);
}
public function login(UserLoginRequest $request){
$user = User::query()->where('login', $request->get('login'))->first();
if (!$user || !Hash::check($request->get('password'), $user->password)) {
return response()->json(['message'=>'Попытка входа не удалась'], 422);
}
$token = $user->createToken('api_token')->plainTextToken;
$user->api_token = $token;
$user->save();
$user = Auth::login($user);
return response()->json(['message'=>Auth::user()->api_token], 200);
}
public function logout(Request $request) {
$request->user()->currentAccessToken()->delete();
return response()->json(['message' => 'Вы вышли из системы'], 200);
}
}
UserCreateRequest:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UserCreateRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'login' => 'required|string|unique:user,login',
'password' => 'required|string|min:8|max:30',
'fio' => 'required|string',
'email' => 'required|email|string',
'number_phone' => 'required|string|min:10'
];
}
public function messages()
{
return [
'login.required' => 'Поле "Логин" обязательно',
'login.string' => 'Поле "Логин" должно содержать только буквы и цифры',
'login.unique:user,login' => 'Логин должен быть уникальным',
'password.required' => 'Поле "Пароль" обязательно',
'password.string' => 'Поле "Пароль" должно содержать только буквы и цифры',
'password.min:8' => 'Поле "Пароль" должно содержать не менее 8 символов',
'password.max:30' => 'Поле "Пароль" должно содержать не более 30 символов',
'fio.required' => 'Поле "ФИО пользователя" обязательно',
'fio.sring' => 'Поле "ФИО пользователя" должно содержать только буквы и цифры',
'email.required' => 'Поле "Email" обязательно',
'email.email' => 'Поле "Email" должно соответствовать своему типу',
'email.string' => 'Поле "Email" должно содержать только буквы и цифры',
'number_phone.required' => 'Поле "Номер телефона" обязательно',
'number_phone.string' => 'Поле "Номер телефона" должно содержать только буквы и цифры',
'number_phone.min:10' => 'Поле "Номер телефона" должно содержать не менее 10 символов',
];
}
}
api.php
<?php
use App\Http\Controllers\ApplicationController;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\ReviewController;
use App\Http\Controllers\AdminController;
use App\Http\Requests\UserLoginRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
Route::group(['middleware' => ['role:admin']], function () {
Route::get('user', [AdminController::class, 'show'])->middleware('auth:sanctum');
Route::post('userUpdate/{user}', [AdminController::class, 'update'])->middleware('auth:sanctum');
Route::post('userStore', [AdminController::class, 'store'])->middleware('auth:sanctum');
Route::post('userDelete/{user}', [AdminController::class, 'delete'])->middleware('auth:sanctum');
Route::post('applicationUpdate/{application}', [AdminController::class, 'updateStatus'])->middleware('auth:sanctum');
Route::post('applicationDeleteAdmin/{application}', [AdminController::class, 'deleteApplication'])->middleware('auth:sanctum');
});
Route::post('login', [AuthController::class, 'login']);
Route::post('authStore', [AuthController::class, 'store']);
Route::get('authLogout', [AuthController::class, 'logout'])->middleware('auth:sanctum');
Route::get('application', [ApplicationController::class, 'show'])->middleware('auth:sanctum');
Route::post('applicationStore', [ApplicationController::class, 'store'])->middleware('auth:sanctum');
Route::post('applicationDelete/{application}', [ApplicationController::class, 'delete'])->middleware('auth:sanctum');
Route::get('review', [ReviewController::class, 'showReview']);
Route::post('reviewStore', [ReviewController::class, 'store'])->middleware('auth:sanctum');
Route::post('reviewDelete/{review}', [ReviewController::class, 'deleteReview'])->middleware('auth:sanctum');
Route::post('reviewUpdate/{id}', [ReviewController::class, 'updateReview'])->middleware('auth:sanctum');
Route::post('reviewRatingStore/{review}', [ReviewController::class, 'storeEstimation'])->middleware('auth:sanctum');
Route::post('reviewRatingDelete/{reviewRating}', [ReviewController::class, 'deleteEstimation'])->middleware('auth:sanctum');
Route::get('reviewRating', [ReviewController::class, 'showReviewRating']);
User.php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Sanctum\HasApiTokens;
use Spatie\Permission\Traits\HasRoles;
/**
* @property integer $id Идентификатор
* @property string $login Логин пользователя
* @property string $password Пароль пользователя
* @property string $fio ФИО пользователя
* @property string $email Email пользователя
* @property string $number_phone Номер телефона пользователя
* @property string $api_token Токен пользователя
* @property integer $role_id Роль пользователя
*/
class User extends Authenticatable
{
use HasFactory, Notifiable, HasApiTokens, HasRoles;
public $timestamps = false;
protected $table = 'user';
protected $hidden = ['password', 'role_id'];
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'login',
'password',
'fio',
'email',
'number_phone',
'api_token',
'role_id'
];
public function application(){
return $this->hasMany('App\Model\Application');
}
public function review(){
return $this->hasMany('App\Model\Review');
}
}