需要帮助让 resolveRouteBinding 在 Laravel 8 中工作
Need help getting resolveRouteBinding working in 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);
}
}
这是我的Post控制器:
<?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) 并且其他模型->查找逻辑不起作用。直接从 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 中有效。我不确定临时版本。
谢谢。
如果要进行隐式路由模型绑定,则必须将方法中的 type-hinted 参数与路由参数的名称匹配:
Route::get('/post/{post}', [PostController::class, 'view']);
public function view(Post $post)
名为 post
、{post}
的路由参数匹配名为 post
、$post
.
的方法参数
我很难让我的模型上的 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);
}
}
这是我的Post控制器:
<?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) 并且其他模型->查找逻辑不起作用。直接从 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 中有效。我不确定临时版本。
谢谢。
如果要进行隐式路由模型绑定,则必须将方法中的 type-hinted 参数与路由参数的名称匹配:
Route::get('/post/{post}', [PostController::class, 'view']);
public function view(Post $post)
名为 post
、{post}
的路由参数匹配名为 post
、$post
.