Сообщение FormRequest в laravel 8 не показывает сообщения

В моем приложении laravel 8 я пытаюсь создать два файла CreateUserRequest и updateUserRequest, чтобы использовать персонализированные проверки.

В методе rules я вызываю переменную моей модели $createRules, но когда я отправляю свою форму, она не отправляет, не отображает сообщения, ошибки ... Ничего.

Я подключил CreateUserRequest, свой model и метод контроллера store:

CreateUserRequest

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',
    ];
}

Метод контроллера store

namespace 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);

Что делает ваш flash::message? Если вы хотите передать данные flashed в представление, вы просто выполняете return redirect()->route('users.index')->with(['message' => 'This is a message!');, но если это что-то особенное, я понимаю, почему вы вызываете Flash::success. Вы должны показать, что делает Flash::success, и представление, которое его использует, чтобы мы могли сказать вам, что не так.

matiaslauriti 06.04.2021 15:28

эта библиотека, его: laracasts / flash, и с его помощью получить все сообщения

scorpions78 06.04.2021 15:33

@matiaslauriti спасибо за ваш ответ, я обновил свой вопрос своей проблемой, которая, как мне кажется ...

scorpions78 06.04.2021 15:37

если вы сделаете dd('testing') на вашем store в качестве первой строки кода, вы увидите или получите обратно testing или нет? Может ваш FormRequest не проходит.

matiaslauriti 06.04.2021 15:39

@matiaslauriti тот же результат, всегда перезагружать страницу, но не останавливать выполнение

scorpions78 06.04.2021 15:43

Тогда ваш FormRequest останавливает вас, он не проходит проверки ... Попробуйте заменить его на нормальный Request, чтобы он вас не останавливал, и скажите мне, видите ли вы теперь testing.

matiaslauriti 06.04.2021 15:44

@matiaslauriti да, теперь да ...

scorpions78 06.04.2021 15:47

Итак, у вас есть errors (правила не проходят). Прочтите, как их отобразить на документы.

matiaslauriti 06.04.2021 16:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
8
29
1

Ответы 1

ТБХ, я не знал, что вы можете получить логику проверки из их модели. Мой совет - просто скопируйте и вставьте свою логику проверки в запрос. Поскольку запрос предназначен только для проверки (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',
    ]
}

да, мои правила касаются других проектов, которые используют эту форму ...

scorpions78 06.04.2021 15:32

То же самое, function rules() должен иметь return ARRAY, если этот массив поступает из другого класса (не имеет значения, какой из них) или если он исходит от вспомогательной функции, то же самое, ему просто нужно вернуть array в правильном формате. . Но я согласен с вашим утверждением, мне не нравится видеть импорт или подобное из других мест, мне нравится буквально видеть там правила, потому что эти проверки предназначены только для контроллера или того, кто его использует, поэтому он должен быть почти уникальным.

matiaslauriti 06.04.2021 15:36

Другие вопросы по теме