Laravel 5.4内部错误:无法检索默认值

9
我有一个表单,可以将数据提交到数据库。但当Laravel尝试将其重定向到同一控制器中的另一种方法时,会出现错误。请注意保留HTML标签。
ReflectionException in RouteDependencyResolverTrait.php line 57:
Internal error: Failed to retrieve the default value

enter image description here

这是我使用的控制器。请检查public function store(Request $request)方法。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Inbox;

class ContactUsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('pages.contactus');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        // validate the data
        // store the data in the database
        // redirect to another page
        $this->validate($request, [
            'name' => 'required|max:255',
            'email' => 'required',
            'telephone' => 'required',
            'message' => 'required',
        ]);

        $inbox = new Inbox;

        $inbox->name = $request->name;
        $inbox->email = $request->email;
        $inbox->telephone = $request->telephone;
        $inbox->message = $request->message;
        $inbox->isnew = 1;
        $inbox->category = $request->category;

        $inbox->save();

        // redirects to the route
        //return redirect()->route('contactus.show', $inbox->id);

        return redirect()->action(
            'ContactUsController@show', ['id' => 11]
        );

    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        print_r($id);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

我尝试了以下两种方法,但Laravel每次都显示相同的错误。

return redirect()->route('contactus.show', $inbox->id);

return redirect()->action(
   'ContactUsController@show', ['id' => 11]
);

这里是路由文件 web.php

Route::get('contactus', 'ContactUsController@create');
Route::get('contactus/show', 'ContactUsController@show');
Route::post('contactus/store', 'ContactUsController@store');

我不知道是什么原因导致了这个问题。任何建议都会有帮助。

谢谢!


对于show方法,用户应该看到什么样的URL呢?是/contactus/show?id=11还是/contactus/show/11?(或者是其他什么?) - Moshe Katz
只要URL传递数据库记录的ID给show方法,我对URL没有意见。感谢您查看我的代码。欢迎提出任何建议。 - Isuru
3个回答

8
你将id的值传递给了路由器,但你没有告诉路由器在路由中使用这个值。因此,路由器不知道将id的值传递到show方法中。
请将路由更改为以下内容:
Route::get('contactus/{id}', 'ContactUsController@show');

如果您的重定向配置正确,您将被重定向到(使用您示例中的ID)/contactus/11


3

在路由中没有定义$id。你可以通过以下方式将其添加到路由中:

Route::get('contactus/show/{id}', 'ContactUsController@show');

或者

你可以将其作为GET参数传递,并在请求中检索它:

public function show(Request $request)
{
    print_r($request->input('id'));
}

0

我曾经遇到同样的错误,原因是参数中有$request,而不是Request $request


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接