Как правильно обработать ошибку в Laravel? - PullRequest
1 голос
/ 19 марта 2020

Я хотел знать, как правильно обрабатывать ошибки. Это один блок моей формы. Если я введу в поле уже существующую запись в моей базе данных с тем же именем команды, это даст мне нарушение ограничения целостности: 1062 Ошибка повторяющегося ввода. Я хочу дать пользователю сообщение об ошибке ниже поля team_name, в котором говорится, что это имя команды уже существует с красными буквами.

<form method="POST" action="createteams">
    @csrf
    <div class="form-group row">
        <label for="team_name" class="col-md-4 col-form-label text-md-right">{{ __('Team Name') }}</label>

        <div class="col-md-6">
            <input id="team_name" type="text" class="form-control @error('team_name') is-invalid @enderror" name="team_name" value="{{ old('team_name') }}" required autocomplete="team_name" autofocus>

            @error('team_name')
            <span class="invalid-feedback" role="alert">
                <strong>{{ $message }}</strong>
            </span>
            @enderror
        </div>
    </div>

приведенный ниже код работает для моего раздела редактирования профиля. Это потому, что он обновляет базу данных и не пытается вставить как выше?

<form method="post" action="{{route('users.update',$user)}}">
    {{ csrf_field() }}
    {{ method_field('patch') }}
    <div class="form-group row">
        <label for="org_name" class="col-md-4 col-form-label text-md-right">{{ __('Organisation Name ') }}</label>

        <div class="col-md-6">
            <input id="org_name" name="org_name" type="text" class="form-control @error('org_name') is-invalid @enderror"value="{{$user->org_name}}">

            @error('org_name')
            <span class="invalid-feedback" role="alert">
                <strong>{{ $message }}</strong>
            </span>
            @enderror
        </div>
    </div>

отредактированный контроллер

class CreateTeamController extends Controller
{
  public function index(Request $request)
  {

    $fName = DB::table('users')->select('org_name', 'id')->whereNotIn('id',[auth()->user()->id])->get();
      return view('teams.createteams',compact('fName'));

    }

    public function store(Request $request)
    {
      $this->validate($request, [
          'org_name' => 'required|string|max:255|unique:teams'
        ]);
      //get the current logged in user
      $user=auth()->user();

      $team=Team::create($request->all());


      //because App\User mopdel has a relationship teams we can directly attach means link a user to a team
      $user->teams()->attach($team);

      //then we check if any user was selected from the dropdown in the form if yes then iterate over each user
      if($request->get('org_select')) {
      foreach($request->get('org_select') as $org) {
        //find the user details from users table using App\User model
        $user = User::find($org);

        Mail::send('mail.notice',['user' => $user,'team'=>$team],
                          function ($message)
                          use ($user) {
                              $message->subject(auth()->user()->org_name." has invited you to a team");
                              $message->to($user->email, $user->org_name);
                          }
                      );
        \DB::table('team_user')->insert(['users_id' => $org, 'teams_id' => $team->id]);
      }
    }
      return redirect('viewteams');

    }

  }

1 Ответ

1 голос
/ 19 марта 2020

вы можете использовать laravel проверку в вашем контроллере


  $request->validate([
    'team_name' => 'required|unique:yourtablename',
  ]);


это даст "имя команды должно быть уникальной ошибкой"

и для отображения ошибки вы можете добавить это в свой просмотр


@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...