В моем приложении laravel 8 я пытаюсь создать два файла CreateUserRequest и updateUserRequest, чтобы использовать персонализированные проверки.
В методе rules я вызываю переменную моей модели $createRules, но когда я отправляю свою форму, она не отправляет, не отображает сообщения, ошибки ... Ничего.
Я подключил CreateUserRequest, свой model и метод контроллера store:
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use App\Models\User;
class CreateUserRequest 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 User::$createRules;
}
}
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable implements MustVerifyEmail
{
use HasFactory, Notifiable, HasRoles;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'email',
'password',
'surname',
'experience',
'skills',
'education',
'location',
'profesion',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public static $createRules = [
'name' => 'required|string|max:191',
'email' => 'required|string|email|max:191|unique:users',
'password' => 'required|min:4|max:10|confirmed',
];
public static $updateRules = [
'name' => 'required|string|max:191',
'email' => 'required|string|email|max:191|unique:users',
];
}
storenamespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Http\Requests\CreateUserRequest;
use App\Http\Requests\UpdateUserRequest;
use App\Models\Role;
use App\Models\User;
use Flash;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Str;
use Intervention\Image\ImageManagerStatic as Image;
use JamesDordoy\LaravelVueDatatable\Http\Resources\DataTableCollectionResource;
use Prettus\Validator\Exceptions\ValidatorException;
public function store(CreateUserRequest $request)
{
try {
$data = array(
'name' => $request->get('name'),
'email' => $request->get('email'),
'password' => password_hash($request->get('password'), PASSWORD_BCRYPT),
'api_token' => Str::random(60),
);
$user = User::create($data);
$roles = $request->get('roles');
// We assign the Client's role
if (empty($roles)) {
$user->assignRole(2);
} else {
foreach($roles as $rol){
$user->assignRole($rol);
}
}
} catch (ValidatorException $e) {
Flash::error($e->getMessage());
}
Flash::success('This is a message!');
return redirect()->route('users.index');
}
В blade у меня есть @include('flash::message') для получения прошитых сообщений, и этот вид включен в другие @include('admin.layouts.alertMessage').
Я не знаю, что делаю не так.
Спасибо за помощь и извините за мой плохой английский.
ОБНОВЛЕНО
моя проблема, я думаю, что я не дохожу до своего контроллера. Я выполняю эхо в своей функции с одним выходом и загружаю всю свою страницу без эха сообщения
прикрепите мою форму и мои маршруты:
<form action = "{{ route('users.store') }}" method = "POST">
@csrf
@include('admin.users.fields')
</form>
маршруты
/** USERS BLOQ ROUTES */
Route::resource('users', UserController::class);
эта библиотека, его: laracasts / flash, и с его помощью получить все сообщения
@matiaslauriti спасибо за ваш ответ, я обновил свой вопрос своей проблемой, которая, как мне кажется ...
если вы сделаете dd('testing') на вашем store в качестве первой строки кода, вы увидите или получите обратно testing или нет? Может ваш FormRequest не проходит.
@matiaslauriti тот же результат, всегда перезагружать страницу, но не останавливать выполнение
Тогда ваш FormRequest останавливает вас, он не проходит проверки ... Попробуйте заменить его на нормальный Request, чтобы он вас не останавливал, и скажите мне, видите ли вы теперь testing.
@matiaslauriti да, теперь да ...
Итак, у вас есть errors (правила не проходят). Прочтите, как их отобразить на документы.






ТБХ, я не знал, что вы можете получить логику проверки из их модели. Мой совет - просто скопируйте и вставьте свою логику проверки в запрос. Поскольку запрос предназначен только для проверки (CMIIW)
CreateRequest
public function rules()
{
return [
'name' => 'required|string|max:191',
'email' => 'required|string|email|max:191|unique:users',
'password' => 'required|min:4|max:10|confirmed',
];
}
UpdateRequest
public function rules()
{
return [
'name' => 'required|string|max:191',
'email' => 'required|string|email|max:191|unique:users',
];
}
ОБНОВИТЬ
Просто объедините его с одним запросом, дайте Обязательно, если для запроса пароль, если ваш маршрут обновления содержит Обновить
use Illuminate\Validation\Rule;
...
public function rules()
{
return [
'password' => Rule::requiredIf(str_contains(url()->current(), 'update')) . '|min:4|max:10|confirmed',
]
}
да, мои правила касаются других проектов, которые используют эту форму ...
То же самое, function rules() должен иметь return ARRAY, если этот массив поступает из другого класса (не имеет значения, какой из них) или если он исходит от вспомогательной функции, то же самое, ему просто нужно вернуть array в правильном формате. . Но я согласен с вашим утверждением, мне не нравится видеть импорт или подобное из других мест, мне нравится буквально видеть там правила, потому что эти проверки предназначены только для контроллера или того, кто его использует, поэтому он должен быть почти уникальным.
Что делает ваш
flash::message? Если вы хотите передать данныеflashedв представление, вы просто выполняетеreturn redirect()->route('users.index')->with(['message' => 'This is a message!');, но если это что-то особенное, я понимаю, почему вы вызываетеFlash::success. Вы должны показать, что делаетFlash::success, и представление, которое его использует, чтобы мы могли сказать вам, что не так.