🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 第7节 Laravel-通过表单实现修改 # 7.1 给HTML添加链接 7.2 创建修改的表单页面 7.3 使用模型实现修改操作 ## 7.1 给HTML添加链接 ## 在 `\resources\views\student\index.blade.php` 中给修改添加 href 属性。 <a href="{{ url('student/update') }}">修改</a> 添加页面和修改其实很像,我们可以复制 `resources\views\student\create.blade.php`,并命名为 `resources\views\student\update.blade.php` 将“新增学生”修改为“修改学生”。 ## 7.2 创建修改的表单页面 ## 创建控制器的update方法。 ~~~ /** * 用于修改学生信息 * * @param * @return bool * @author webjust [604854119@qq.com] */ public function update() { return view('student/update'); } ~~~ 新增加了一条路由: Route::get('/', ['uses' => 'StudentController@index']); // 新增表单路由 Route::any('student/create', ['uses' => 'StudentController@create']); Route::any('student/update', ['uses' => 'StudentController@update']); 此时,刷新首页,点击修改,应该可以打开修改的表单页面了吧! 但是,我们要修改,首先需要传递一个被修改的用户的 主键id 作为参数吧! **定义一个但参数的路由** Route::any('student/update/{id}', ['uses' => 'StudentController@update']); 此时,我们在修改url()方法,传递第2个参数,使用数组的方式,传递id的值: <a href="{{ url('student/update', ['id' => $student->id]) }}">修改</a> 在控制器中的update()修改方法中,要接收 id 值;提交时要获取表单的数据吧!所以加入Request依赖组件把! 这个组件很机制的就可以获取传递过来的id值。 如下: public function update(Request $request, $id) { $student = Student::find($id); var_dump($student); return view('student/update'); } 我们使用传递过来的id主键,作为参数,使用模型的 find($id) 方法,即可查询数据表中对应的那条数据了!现在我们使用 var_dump 打印,查看结果! ![](https://box.kancloud.cn/65008a60c22a7a8530639610b14911c9_1046x728.png) 修改学生的信息,把查询出来的数据 `$student_info`,传递给视图。 public function update(Request $request, $id) { $student_info = Student::find($id); return view('student/update', ['student_info' => $student_info]); } 此时,我们继续做一些操作,把数据填充到视图中。 ~~~ <form class="form-horizontal" method="post" action=""> {{ csrf_field() }} <div class="form-group"> <label for="name" class="col-sm-2 control-label">姓名</label> <div class="col-sm-5"> <input type="text" value="{{ old('Student')['name'] ? old('Student')['name'] : $student_info->name }}" name="Student[name]" class="form-control" id="name" placeholder="请输入学生姓名"> </div> <div class="col-sm-5"> <p class="form-control-static text-danger">{{ $errors->first('Student.name') }}</p> </div> </div> <div class="form-group"> <label for="age" class="col-sm-2 control-label">年龄</label> <div class="col-sm-5"> <input type="text" value="{{ old('Student')['age'] ? old('Student')['age'] : $student_info->age }}" name="Student[age]" class="form-control" id="age" placeholder="请输入学生年龄"> </div> <div class="col-sm-5"> <p class="form-control-static text-danger">{{ $errors->first('Student.age') }}</p> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">性别</label> <div class="col-sm-5"> @foreach($student->sex() as $ind => $sex) <label class="radio-inline"> <input type="radio" name="Student[sex]" {{ ((isset(old('Student')['sex']) && old('Student')['sex'] == $ind) || $student_info->sex == $ind) ? 'checked' : '' }} value="{{ $ind }}"> {{ $sex }} </label> @endforeach </div> <div class="col-sm-5"> <p class="form-control-static text-danger">{{ $errors->first('Student.sex') }}</p> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-primary">提交</button> </div> </div> </form> ~~~ 我们采用的是POST提交,提交到当前页 update() 方法中,所以action的值留空。 ## 7.3 使用模型实现修改操作 ## update() 的方法,和增加的方法差不多,所以可以使用增加的验证方式。 public function update(Request $request, $id) { $student_info = Student::find($id); // 修改操作 if($request->isMethod('POST')) { // 校验 $this->validate($request, [ 'Student.name' => 'required|min:2|max:20', 'Student.age' => 'required|integer', 'Student.sex' => 'required|integer', ],[ 'required' => ':attribute 为必填项', 'min' => ':attribute 长度不能小于2个字符', 'max' => ':attribute 长度不能大于20个字符', 'integer' => ':attribute 必须为数字', ],[ 'Student.name' => '用户名', 'Student.age' => '年龄', 'Student.sex' => '性别', ]); $data = $request->input('Student'); $student_info->name = $data['name']; $student_info->age = $data['age']; $student_info->sex = $data['sex']; $student_info->updated_time = time(); // 模型的修改方法 $ret = $student_info->save(); if($ret) { return redirect('/')->with('success', '修改成功!')->withInput(); } else{ return redirect('student/create')->with('error', '修改失败!')->withInput(); } } return view('student/update', ['student_info' => $student_info]); } 到此,我们的修改功能已经成功了。 ![](https://box.kancloud.cn/b8caf8714964adc01bdc82393f441b9e_1030x635.png) 如图,左边的hover效果,我们可以继续优化! 把 `\resources\views\shared\siderbar.blade.php` 文件修改下: <div class="col-md-3"> <div class="list-group"> <a href="{{ url('/') }}" class="list-group-item {{ Request::path() != 'student/create' ? 'active' : '' }}">学生列表</a> <a href="{{ url('student/create') }}" class="list-group-item {{ Request::path() == 'student/create' ? 'active' : '' }}">新增学生</a> </div> </div> 主要就是把条件修改了 ` Request::path() != '/' ? 'active' : ''` 修改为 ` Request::path() != 'student/create' ? 'active' : ''`