Laravel 5.4 Форма запроса уникальной проверки: как получить доступ к идентификатору? - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть этот запрос формы:

<?php

namespace App\Http\Requests;

use App\Sociallink;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

class SociallinkRequest 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 [
          'seq' => 'required|unique:sociallinks,seq,' . $this->id . ',id',
          'social_name' => 'required|unique:sociallinks,social_name,' . $this->id . ',id',
          'cssclass' => 'required',
          'url' => 'nullable|active_url'
        ];
    }

Мне нужны поля seq и social_name как уникальные.Когда я пытаюсь редактировать, этот код не работает.Я обнаружил, что $this->id не существует из dd($this).Мой URL: http://prj.test/sociallink/2/edit.Во многих примерах здесь используется $this->id, но я не могу получить доступ к переменной в любом месте моего кода, поскольку она, кажется, не существует.Когда я заменяю $this->id на физический id, такой как 2 в этом примере, тогда проверка работает нормально.Но динамически, как я могу использовать текущую строку id, чтобы выполнить уникальную проверку?

1 Ответ

0 голосов
/ 14 февраля 2019

Если у вас нет формы для ввода с id, на самом деле она отсутствует в $request ($this в вашем коде запроса).Вы можете убедиться в этом, возвратив весь запрос от вашего контроллера:

return request()->all(); 

Предполагая, что этот маршрут определен примерно так:

sociallink/{sociallink}/edit ...

Тогда в вашем запросе вы можете сделать:

public function rules()
{
    $sociallink = $this->route('sociallink');
    return [
      'seq'         => 'required|unique:sociallinks,seq,' . $sociallink . ',id',
      'social_name' => 'required|unique:sociallinks,social_name,' . $sociallink . ',id',
      'cssclass'    => 'required',
      'url'         => 'nullable|active_url'
    ];
}

Пример этого есть в документации Форма запроса :

Также обратите внимание на вызов метода route в примере выше.Этот метод предоставляет вам доступ к параметрам URI, определенным на вызываемом маршруте, таким как параметр {comment} в приведенном ниже примере:

Route::post('comment/{comment}');

...