2015-08-16 106 views
0

我有一个审核队列作为我正在构建的应用程序的一部分。用户可以提交问卷,但需要由管理员进行审核。提交表单给出了MethodNotAllowedHttpException错误

我已经构建了队列的功能,并可以加载他们提交给页面的答案,但是我在实现批准/拒绝按钮时遇到了问题。

我想要页面显示他们的答案,它做的,然后底部有一个按钮批准,然后按钮拒绝(与文本框的原因)。

当任一按钮被点击时,我正在尝试更新表格 - 但是我只是得到一个错误MethodNotAllowedHttpException in RouteCollection.php line 201:

我不明白为什么我以类似的方式建立用户管理功能没有任何问题。

谁能帮助,或者建议一个更好的方式做我在做什么:

路线

Route::resource('/questionnaire', 'QuestionnaireController'); 

控制器

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

use App\Http\Requests; 
use App\Http\Controllers\Controller; 
use Validator; 
use Input; 
use Redirect; 
use App\Questionnaire; 
use App\User; 
use DB; 

class QuestionnaireController extends Controller 
{ 
    /** 
    * Display a listing of the resource. 
    * 
    * @return Response 
    */ 
    public function index() 
    { 
     return view('questionnaire.index'); 
    } 

    public function moderate() 
    { 
     $questionnaires = DB::table('users') 
         ->join('questionnaire', 'users.id', '=', 'questionnaire.memberid') 
         ->select('users.username', 'questionnaire.*') 
         ->get(); 
     return view('questionnaire.moderate', ['questionnaires' => $questionnaires]); 
    } 

    public function view($id) 
    { 
     $questionnaire = Questionnaire::find($id); 

     return view('questionnaire.view', ['questionnaire' => $questionnaire]); 
    } 
    /** 
    * Show the form for creating a new resource. 
    * 
    * @return Response 
    */ 
    public function create() 
    { 
     // 
    } 

    /** 
    * Store a newly created resource in storage. 
    * 
    * @param Request $request 
    * @return Response 
    */ 
    public function store(Request $request) 
    { 
     $questionnaire = new Questionnaire; 

     $validator = Validator::make($request->all(), [ 
      'q1' => 'required|between:128,512', 
      'q2' => 'required|between:128,512', 
      'q3' => 'required|between:128,512', 
      'q4' => 'required|between:128,512', 
      'q5' => 'required|between:128,512', 
     ], [ 
      'q1.required' => 'The first answer is empty!', 
      'q2.required' => 'The second answer is empty!', 
      'q3.required' => 'The third answer is empty!', 
      'q4.required' => 'The fourth answer is empty!', 
      'q5.required' => 'The fifth answer is empty!', 
      'q1.between' => 'The first answer must be between :min - :max characters long.', 
      'q2.between' => 'The second answer must be between :min - :max characters long.', 
      'q3.between' => 'The third answer must be between :min - :max characters long.', 
      'q4.between' => 'The fourth answer must be between :min - :max characters long.', 
      'q5.between' => 'The fifth answer must be between :min - :max characters long.', 
     ]); 

     if ($validator->fails()) { 
      return redirect('/questionnaire') 
       ->withErrors($validator) 
       ->withInput(); 
     } 

     $questionnaire->memberid = $request->memberid; 
     $questionnaire->q1 = $request->q1; 
     $questionnaire->q2 = $request->q2; 
     $questionnaire->q3 = $request->q3; 
     $questionnaire->q4 = $request->q4; 
     $questionnaire->q5 = $request->q5; 

     $questionnaire->save(); 

     $id = $request->memberid; 
     $user = User::find($id); 
     $user->confirmed = 1; 

     $user->save(); 

     return redirect('/'); 
    } 

    /** 
    * Display the specified resource. 
    * 
    * @param int $id 
    * @return Response 
    */ 
    public function show($id) 
    { 
     $questionnaire = Questionnaire::find($id); 
     return view('questionnaire.show', ['questionnaire' => $questionnaire]); 
    } 

    /** 
    * Show the form for editing the specified resource. 
    * 
    * @param int $id 
    * @return Response 
    */ 
    public function edit($id) 
    { 
     $questionnaire = Questionnaire::find($id); 
     return view('questionnaire.edit', ['questionnaire' => $questionnaire]); 
    } 

    /** 
    * Update the specified resource in storage. 
    * 
    * @param Request $request 
    * @param int $id 
    * @return Response 
    */ 
    public function update($id) 
    { 
     $questionnaire = Questionnaire::find($id); 
     $button = Input::get('buttonid'); 

     if ($button == "approve") 
     { 
      $questionnaire->status = 3; 
      $questionnaire->save(); 
      return redirect('questionnaire/moderate'); 
     } 

     if ($button == "reject") 
     { 
      $questionnaire->status = 2; 
      $questionnaire->rejectreason = Input::get('rejectreason'); 
      $questionnaire->save(); 
     } 
    } 

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

查看可可以在URI /问卷/ {membersid}/ed中找到它

@extends('app') 

@section('content') 

    <div class='col-lg-4 col-lg-offset-4'> 

     @if (Auth::guest()) 
      You need to be logged in to use this page. 
     @else 


      <h1><i class='fa fa-user'></i> Review Questionnaire</h1> 

      <h3>Question 1:</h3> 
      {{$questionnaire->q1}} 

      <h3>Question 2:</h3> 
      {{$questionnaire->q2}} 

      <h3>Question 3:</h3> 
      {{$questionnaire->q3}} 

      <h3>Question 4:</h3> 
      {{$questionnaire->q4}} 

      <h3>Question 5:</h3> 
      {{$questionnaire->q5}} 
      <br /> 
      <br /> 
      {!! Form::model($questionnaire, ['role' => 'form', 'url' => '/questionnaire/' . $questionnaire->memberid . '/edit', 'method' => 'PUT'])!!} 
      {!! Form::hidden('memberid', $questionnaire->memberid) !!} 
      {!! Form::submit('Approve', ['class' => 'btn btn-success', 'name' => 'buttonid', 'value' => 'approve']) !!} 
      {!! Form::submit('Reject', ['class' => 'btn btn-danger', 'name' => 'buttonid', 'id' => 'buttonid', 'value' => 'reject']) !!} 
      {!! Form::textarea('rejectreason', null, ['placeholder' => "Reason why you're rejecting... please be specific as the member will read this", 'class' => 'form-control']) !!} 
      {!! Form::close() !!} 

     @endif 

    </div> 

@endsection 

当我点击任一按钮,虽然,我得到的错误如下:

MethodNotAllowedHttpException in RouteCollection.php line 201: 

in RouteCollection.php line 201 
at RouteCollection->methodNotAllowed(array('GET', 'HEAD')) in RouteCollection.php line 188 
at RouteCollection->getRouteForMethods(object(Request), array('GET', 'HEAD')) in RouteCollection.php line 140 
at RouteCollection->match(object(Request)) in Router.php line 746 
at Router->findRoute(object(Request)) in Router.php line 655 
at Router->dispatchToRoute(object(Request)) in Router.php line 631 
at Router->dispatch(object(Request)) in Kernel.php line 236 
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in VerifyCsrfToken.php line 50 
at VerifyCsrfToken->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 54 
at ShareErrorsFromSession->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 62 
at StartSession->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37 
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 59 
at EncryptCookies->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42 
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 
at Pipeline->then(object(Closure)) in Kernel.php line 122 
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 87 
at Kernel->handle(object(Request)) in index.php line 54 

我看其他问题,但他们似乎具体到他们设立。有人能帮忙吗?

回答

0

您应该在揭幕战的形式改变

{!! Form::model($questionnaire, ['role' => 'form', 'url' => '/questionnaire/' . $questionnaire->memberid, 'method' => 'PUT'])!!} 

您发送这是不正确的请求/编辑。查看documentation中资源控制器的路由表,其中显示了允许的方法。

编辑:如果您使用资源的路由名称而不是手动构建URL,则会发现您将避免这些类型的错误。

+0

当我提交表单与您的更改它仍然不会更新数据库? – James

+0

我怀疑你的更新方法中没有任何条件得到满足。 'dd(Input :: get('buttonid'));'output? –

0

如果您要更新调查问卷,则表示它已经存在。您不必保存但更新。而且,你必须将数据传递,就像这样:

$questionnaire->update(Request::all()); 

P.S:那是在什么亚历克斯说顶部,这是完美的了。