这是我的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
变量没有获取必要的属性。
答案 0 :(得分:1)
尽管上面的答案可以解决该问题,但我终于在代码中找到了问题!
来自Route Model Binding的Laravel文档:
由于$ user变量被类型提示为App \ User Eloquent模型 并且变量名称与{user} URI段匹配,Laravel将 自动注入ID匹配的模型实例 请求URI中的相应值。如果匹配的模型实例 在数据库中找不到404 HTTP响应会自动 被生成。
这是我的问题:我正在使用$producerType
变量,而Laravel期望使用$producers_type
是producers-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');
}