【问题标题】:Laravel 5.1 Update form can't get it to workLaravel 5.1 更新表单无法正常工作
【发布时间】:2016-03-03 23:48:34
【问题描述】:

每当我尝试更新用户时,我都会收到:NotFoundHttpException in RouteCollection.php line 161: 错误。我希望它能够在 zoekEmail 输入中填写电子邮件。它将更新数据库中的该行。任何人都可以在以下代码中找到任何缺陷吗?

控制器功能:

public function changeMedewerker(){
        $email = Route::current()->getParameter('email');
        return User::updateMedewerker($email);
    }

模型功能:正如您在此处看到的,我想检查电子邮件是否与视图中检查的输入相同(名称=zoekmail)

public static function updateMedewerker($email)
    {
        DB::table('gebruikers')
            ->where('email','=', $email)
            ->update(['email' => \Input::get('email')],
                ['username' => \Input::get('gebruikersnaam')],
                ['password' => \Input::get('wachtwoord')],
                ['voornaam' => \Input::get('voornaam')],
                ['achternaam' => \Input::get('achternaam')]);

        return redirect('/medewerkermuteren');

    }

使用的路线:

Route::put('changeMedewerker/{email}', array('as' => 'veranderMw', 'uses' =>'UserController@changeMedewerker'));

查看表格:

<form method="POST" action="/veranderMedewerker/{{Input::get('zoekmail')}}">
                   {!! csrf_field() !!}
                   <input type="hidden" name="_method" value="PUT">
                     <div class="form-group">
                       <div class="input-group">
                         <input type="text" id="zoekmail" name="zoekmail" class="form-control" placeholder="E-mail">

                       </div>
                     </div>
                     <div class="form-group">
                       <label for="email">Email address</label>
                       <input type="email" class="form-control" id="email" name="email" placeholder="E-mail">
                     </div>
                     <div class="form-group">
                       <label for="gebruikersnaam">Gebruikersnaam</label>
                       <input type="text" class="form-control" id="gebruikersnaam" name="username" placeholder="Gebruikersnaam">
                     </div>
                     <div class="form-group">
                       <label for="wachtwoord">Wachtwoord</label>
                       <input type="password" class="form-control" id="wachtwoord" name="password" placeholder="wachtwoord">
                     </div>
                       <div class="form-group">
                       <label for="voornaam">Voornaam</label>
                       <input type="text" class="form-control" id="voornaam" name="voornaam" placeholder="Voornaam">
                     </div>
                     <div class="form-group">
                       <label for="achternaam">Achternaam</label>
                       <input type="text" class="form-control" id="achternaam" name="achternaam" placeholder="Achternaam">
                     </div>
                             <div class="row">
                           <div class="col-sm-4"><button type="submit" name="veranderGebruiker" class="btn btn-success">
                             <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Verander</button>
                            </div>

                           <div class="col-sm-4"><button type="submit" class="btn btn-warning">Annuleer</button>
                            </div>
                       </div>
                   </form>

【问题讨论】:

  • 您是否在控制器顶部使用了用户命名空间?
  • 我想知道这一点,在您的表单中,您确实指定了...action="/veranderMedewerker/{{Input::get('zoekmail')}}"...,而在您的路线中,您有Route::put('changeMedewerker/{email}'...,您确定您没有错过这里的东西吗?为了安全起见,您可以像route('veranderMw', $parameter) 这样检索路线,其中$parameter 可以是您的{{Input::get('zoekmail')}} - 这种方法确保laravel 在路线不存在的情况下抛出一些东西(或者您以错误的方式配置它)。另外,通过 url 传递电子邮件地址。我不建议这样做。
  • 我很抱歉我没有正确翻译它我的错。它现在可以工作了!

标签: forms laravel


【解决方案1】:

我注意到您的表单动作指向“veranderMedewerker”,而您的路线被命名为“changeMedewerker”(英文等效)。该路由还指向错误的控制器函数“changeMedewerker”而不是“updateMedewerker”。

另外,一个好的做法是使用辅助函数url('page') 生成url。你也可以指向一个命名的路由,例如:

&lt;form method="POST" action="{{ route('veranderMw') }}"&gt;

您不需要传递“电子邮件”URL 参数,因为您已经从请求中获得了该数据。我重新审视了你的代码:

/**
 * Update the medewerker.
 * 
 * @param Request $request;
 */
public static function updateMedewerker(Request $request)
{
    $email = $request->input('email');

    User::whereEmail($email)->update($request->all());

    return redirect('/medewerkermuteren');
}

还有路线:

Route::put('updateMedewerker', ['as' => 'veranderMw', 'uses' => 'UserController@updateMedewerker'));

这应该可以解决您的问题。祝你好运。

【讨论】:

  • 我的代码是荷兰语,我翻译了它,所以英语程序员知道我在尝试什么。想我是为了快哈哈。
  • 关于上面的代码,我得到了它的工作,但我不得不改变: User::whereEmail($email)->update($request->all()); to : User::whereEmail($email)->update($request->except('_token','_method','zoekmail','veranderGebruiker'));我想知道您是否知道更好的解决方案?它看起来不像是最佳实践 =D 并且密码没有被散列,所以我需要稍微改变一下哈哈。
  • 是的,我注意到了,虽然我更喜欢用英语编码 :)。使用$request-&gt;all() 时是否出错?另一种干净的方法是使用$request-&gt;only('email', 'username', 'password', 'first_name', 'last_name')。
  • 没有错误只是密码没有被加密是不是这样:$email = $request->input('zoekmail'); $data = array('username' => $request['username'], 'email' => $request['email'], 'password' => bcrypt($request['password']), 'voornaam' => $request['voornaam'], 'achternaam' => $request['achternaam'], );用户::whereEmail($email)->update($data);返回重定向('/medewerkermuteren');
  • 我也喜欢用英语编码,但我总是这样做,但我正在学校作业,不幸的是这个必须是荷兰语..
猜你喜欢
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 2016-01-13
  • 2017-06-17
  • 2015-12-01
  • 2016-04-02
  • 2017-05-13
  • 1970-01-01
相关资源
最近更新 更多