Привязка модели маршрута Laravel: метод уничтожения не захватывает необходимую информацию - PullRequest
0 голосов
/ 22 января 2019

Вот мой контроллер для модели ProducerType:

namespace App\Http\Controllers;

use App\ProducerType;
use App\Http\Requests\ValidateProducerTypes;
use Illuminate\Http\Request;

class ProducerTypeController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }

    ...

    public function destroy(ProducerType $producerType)
    {
        $producerType->delete();
        return redirect('/producers');
    }
}

А вот и моя модель:

namespace App;

use Illuminate\Database\Eloquent\Model;

class ProducerType extends Model
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'nome'
    ];
}

Вид:

<form action="/producers-type/{{ $type->id }}" method="POST">
    @csrf
    @method('DELETE')
    <button type="submit" class="btn-icon">
        <img src="{{ asset('images/times-circle-regular.svg') }}" alt="">
    </button>
</form>

Маршруты:

Route::resource('producers-type', 'ProducerTypeController', [
    'only' => ['store', 'update', 'destroy']
])->middleware('permission:create users');

Моя проблема: $producerType переменная не захватывает атрибуты необходимости.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Хотя приведенный выше ответ дает решение проблемы, я, наконец, нашел проблему в своем коде!

Из документации Laravel для Привязка модели маршрута :

Поскольку переменная $ user намекается на тип в виде модели App \ User Eloquent и имя переменной совпадает с сегментом URI {user}, Laravel автоматически внедрит экземпляр модели с идентификатором, соответствующим соответствующему значению, из URI запроса,Если соответствующий экземпляр модели не найден в базе данных, автоматически генерируется HTTP-ответ 404.

Это моя проблема: я использую переменную $producerType, а Laravel ожидает $producers_typeпотому что мой маршрут producers-type/{producers_type}.

0 голосов
/ 22 января 2019

Попробуйте изменить:

public function destroy(ProducerType $producerType)
{
    $producerType->delete();
    return redirect('/producers');
}

до

public function destroy($id)
{
    $producerType = ProducerType::find($id);
    $producerType->delete();
    return redirect('/producers');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...