Laravel路线模型绑定:destroy方法未获取必要的信息

时间:2019-01-22 19:24:29

标签: php laravel laravel-5.7

这是我的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 :(得分:1)

尽管上面的答案可以解决该问题,但我终于在代码中找到了问题!

来自Route Model Binding的Laravel文档:

  

由于$ user变量被类型提示为App \ User Eloquent模型   并且变量名称与{user} URI段匹配,Laravel将   自动注入ID匹配的模型实例   请求URI中的相应值。如果匹配的模型实例   在数据库中找不到404 HTTP响应会自动   被生成。

这是我的问题:我正在使用$producerType变量,而Laravel期望使用$producers_typeproducers-type/{producers_type}

答案 1 :(得分:0)

尝试更改:

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

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