问题描述
我很难使模型上的resolveRouteBinding在Laravel 8.10.0中工作
$ php artisan --version
Laravel Framework 8.10.0
我已经按照https://laravel.com/docs/8.x/routing#route-model-binding的文档添加了自己的resolveRouteBinding方法,但是当我调用路由时它似乎不起作用。我的模型如下:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
/**
* Get the user that owns the post.
*/
public function user()
{
return $this->belongsTo('App\Models\User');
}
/**
* Retrieve the model for a bound value.
*
* @param mixed $value
* @param string|null $field
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function resolveRouteBinding($value,$field = null)
{
// return $this->find(1)->firstOrFail();
abort(404);
}
}
这是我的PostController:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Post;
class PostController extends Controller
{
public function view(Post $post) {
dd($post);
}
}
而且,我在web.php中的路线:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PostController;
Route::get('/post/{item_id}',[PostController::class,'view']);
当我尝试在浏览器中加载此路由时,我看到了新创建的Post对象的转储。它似乎没有执行abort(404),并且附加的model-> find逻辑不起作用。直接从artisan tinker调用resolveRouteBinding方法可以正常工作,因此,我知道该方法有效。
$ php artisan tinker
Psy Shell v0.10.4 (PHP 7.4.10 — cli) by Justin Hileman
>>> use App\Models\Post;
>>> $post = new Post();
=> App\Models\Post {#3552}
>>> $post->resolveRouteBinding(1,null);
Symfony/Component/HttpKernel/Exception/NotFoundHttpException
>>> quit
Exit: Goodbye
谁能告诉我我所缺少的吗?我知道这在Laravel 5.8中有效。我不确定过渡版本。
谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)