Laravel 4抛出MethodNotAllowedHttpException

时间:2014-07-24 19:02:09

标签: php twitter-bootstrap laravel-4

我正在制作一个简单的注册表单,然后将数据提交到我的数据库。但是,我遇到的问题是应该将信息提交到数据库的代码不起作用。

这是我使用Twitter Bootstrap

制作的表格
<!DOCTYPE html>
<html>
<body>
    <div class="modal-body">
        <div class="well">
            <div id="myTabContent" class="tab-content">
                <div class="tab-pane active in" id="login">
                    <form method="POST" action='/adding_to_table' class="form-horizontal">
                        <fieldset>
                            <div id="legend">
                                <legend class="">Create Your Account</legend>
                            </div>
                            <div class="control-group">
                                <!-- Username -->
                                <label class="control-label"  for="firstname">First Name</label>
                                <div class="controls">
                                    <input type="text" id="first_name" name="firstname" placeholder="" class="input-xlarge">
                                </div>
                            </div>

                            <div class="control-group">
                                <!-- Username -->
                                <label class="control-label"  for="lastname">Last Name</label>
                                <div class="controls">
                                    <input type="text" id="last_name" name="lastname" placeholder="" class="input-xlarge">
                                </div>
                            </div>

                            <div class="control-group">
                                <!-- Username -->
                                <label class="control-label"  for="email">E-mail</label>
                                <div class="controls">
                                    <input type="text" id="e_mail" name="email" placeholder="" class="input-xlarge">
                                </div>
                            </div>

                            <div class="control-group">
                                <!-- Username -->
                                <label class="control-label"  for="username">Username</label>
                                <div class="controls">
                                    <input type="text" id="username" name="username" placeholder="" class="input-xlarge">
                                </div>
                            </div>


                            <div class="control-group">
                                <!-- Password-->
                                <label class="control-label" for="password">Password</label>
                                <div class="controls">
                                    <input type="password" id="password" name="password" placeholder="" class="input-xlarge">
                                </div>
                            </div>

                            <div class="control-group">
                                <!-- Button -->
                                <div class="controls">
                                    <button class="btn btn-primary">Submit</button>
                                </div>
                            </div>
                        </fieldset>
                    </form>                
                </div>
            </div>
        </div>
    </div>

<script class="cssdeck" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script class="cssdeck" src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.1/js/bootstrap.min.js"></script>
</body>
<html>

这是我在表单中传递给action字段的路径:

  Route::get('/adding_to_table', function()
  {
      return View::make('create');
  });

这是应该加载路由(上面)的create.php文件 数据库提交

  DB::table('user_info')->insert(
    array("First_name" => Input::post('firstname'),
          "Last_name" => Input::post("lastname"),
          "E-mail" => Input::post("email"),
          "Username" => Input::post("username"),
          "Password" => Input::post("password"),
        )
    );

echo "Successfully entered user information into data table";

然而,Laravel并不喜欢这样,并向我抛出这个错误: Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException 打开:/Users/brendanbusey/Desktop/php_site/laravelSite/bootstrap/compiled.php

        }))->bind($request);
        } else {
        $this->methodNotAllowed($others);
       }
   }
  protected function methodNotAllowed(array $others)
  {
      throw new MethodNotAllowedHttpException($others);
  }
  protected function check(array $routes, $request, $includingMethod = true)

我已经进行了双重和三重检查,以确保在我通过POST发送数据以及我的所有列中的所有名称时,我使用的是html表单中的名称而不是id。数据库匹配我的代码中的数据库。任何帮助将不胜感激!

5 个答案:

答案 0 :(得分:6)

您需要定义两条路线,一条用于GET,另一条用于POST。如果你想使用相同的adds_to_table网址,它应该像

Route::get('/adding_to_table', function() {
    // code to display your form initially
});
Route::post('/adding_to_table', function() {
    // code to process the form submission
});

也许我没有正确理解你,但看起来你正在使用View::make()来尝试运行你的数据库插入代码。我相信View::make()只是为了渲染刀片模板,所以我认为这不会起作用。相反,你可以将这种类型的东西放入控制器方法,甚至可以直接放入后期封闭。要访问提交的值,您应该使用Input::get('firstname')等。在laravel docs here中,它解释了

  

您无需担心用于请求的HTTP谓词,如   对所有动词都以相同的方式访问输入。

答案 1 :(得分:0)

您需要将HTML中的表单开头行更改为:

<form method="POST" action='adding_to_table' class="form-horizontal">

routes.php文件中,您需要拥有以下内容:

Route::get('adding_to_table', function()
{
    return View::make('create');
});

Route::post('adding_to_table', function()
{
    DB::table('user_info')->insert(
        array("First_name" => Input::get('firstname'),
              "Last_name" => Input::get("lastname"),
              "E-mail" => Input::get("email"),
              "Username" => Input::get("username"),
              "Password" => Input::get("password"),
        )
    );
});

答案 2 :(得分:0)

更改

Input::post() to Input::get()

检索输入。

答案 3 :(得分:-1)

只需在表单下方添加{{ csrf_field() }},就像这样:

<form method="POST" action='/adding_to_table' class="form-horizontal">
    {{ csrf_field() }}

答案 4 :(得分:-1)

在Create.blade.php中

{!! Form::open(array('route' => 'ControllerName.store','method' => 'POST','files' => true)) !!}
控制器中的

: -

public function store(Request $request)
    {   
        $this->validate($request, [
            'first_name' =>'required',
            'last_name' => 'required',
            'e_mail' =>'required',
            'username' => 'required',
            'password' =>'required',
        ]);
ModelName::create($request->all());
return route->(ControllerName.index);

注意:检查所有字段的模型是否可填写。