2017-03-15 97 views
7

我有一個數據提交到數據庫的形式。它將數據提交給數據庫。但是當Laravel嘗試將它重定向到同一控制器中的另一個方法時會產生錯誤。Laravel 5.4內部錯誤:無法檢索默認值

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(
      '[email protected]', ['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(
    '[email protected]', ['id' => 11] 
); 

這裏是路由文件web.php

Route::get('contactus', '[email protected]'); 
Route::get('contactus/show', '[email protected]'); 
Route::post('contactus/store', '[email protected]'); 

我不知道是什麼原因導致此問題。任何建議都會有幫助。

謝謝!

+0

對於'show'方法,用戶應該是什麼ee作爲URL?它是'/ contactus/show?id = 11',還是'/ contactus/show/11'? (或別的?) –

+0

只要它通過數據庫記錄的id來顯示方法,我不介意這個URL。感謝您查看我的代碼。歡迎任何建議。 – Isuru

回答

7

您的id值傳遞到重定向的路由器,但你沒有告訴路由器在路由中使用此值。因此,路由器不知道該id值傳遞到show方法。

更改路線是這樣的:

Route::get('contactus/{id}', '[email protected]'); 

然後您重定向應該工作,你應該(用ID從你的例子)/contactus/11被重定向到。

+0

非常感謝! – Isuru

3

你沒有$id路線上定義。您可以添加到路由具有:

Route::get('contactus/show/{id}', '[email protected]'); 

OR

你可以把它作爲一個GET參數,並在請求檢索:

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

我有同樣的錯誤這是因爲還有參數$request而不是Request $request