需要帮助使resolveRouteBinding在Laravel 8中工作

问题描述

我很难使模型上的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 (将#修改为@)