首页 > 解决方案 > Laravel redirect()->action 不起作用并显示缺少的参数

问题描述

PHP 版本:7.2
Laravel 版本:6.2

我正在通过 laravel 逐篇做一个简单的项目。
当我遇到 redirect()->action 时,我对此有点困惑。我想通过 redirect()->action 传递一个名为 id 的变量,但它不起作用。

错误消息缺少 [Route: blog/post.show] [URI: blog/post/{post}] 的必需参数。

如果我删除变量名,只传递变量值就可以了。我阅读了手册,但仍然无法理解原因。你能帮我解释一下逻辑吗?谢谢你。下面是示例代码。

路由器.php

Route::group(['prefix' => 'blog',
              'as' => 'blog/',
              'namespace' => 'Blog'],
              function(){
                    Route::resource('/post',"PostController");
              });



PostController.php

创建新的博客文章(错误)
不明白为什么这不起作用?变量名($id) 是一样的。

    public function store(Request $request)
    {
        $post = new BlogPost;
        $post->title = $title;
        $post->content = $content;
        $post->save();

        return redirect()->action(
            'Blog\PostController@show', ['id' => $post->id]
        );
    }

创建新博文(正确)

    public function store(Request $request)
    {
        $post = new BlogPost;
        $post->title = $title;
        $post->content = $content;
        $post->save();

        return redirect()->action(
            'Blog\PostController@show', [$post->id]
        );
        //Or 'Blog\PostController@show', $post->id
    }

显示新的博客文章

    public function show($id)
    {
        $post = BlogPost::find($id);
        if(! $post) {
            abort(404);
        }
        $content = $post->content;

        return view("blog.post", [
            "title" => $post->title,
            "content" => $content,
        ]);
    }

谢谢

标签: phplaravelredirect

解决方案


您收到错误消息是因为您使用的是Resource RouteRoute,它会自动将模型与 Route 绑定

有关更多信息,请参阅:https ://laravel.com/docs/6.x/routing#route-model-binding


推荐阅读