请检查命名空间:
使用默认控制器验证使用方式: $this->validate($request,....)
使用验证类则需要加上命名空间: \Validator::make(), 斜杠命名空间+大写开头,另外要注意,使用数据验证,
是需要在路由到控制器之间设立一个中间件来进行过滤的,这时需要使用路由组来加载web中间件.
页面不存在或者路由设置错误
请检查有没有配置路由和配置form表单action地址
老师的连接 :
https://pan.baidu.com/s/1c2smMYG
不会啊,有没有看之前的基础篇,之所以你又添加了一条,我猜测应该是因为你之前没有根据id获取数据吧,然后直接新建模型然后save了
{{old('Student')['name'] ? old('Student')['name'] : (isset($student->name) ? $student->name : '')}}
至少我在做的时候,也出现了这个问题,所以给他加了个判断,确定name这个字段存在,可以解决以上问题。
研究了下,改成这样可以完美的解决问题
{{isset($student->name) && $student->gender==$gid?"checked":''}}
视频里是sex,我改成了gender。其他没有区别
public function fromDateTime($value) { return empty($value) ? $value : $this->getDateFormat(); }
在student模型添加这段代码就可以了
@foreach( $student->sexToName() as $ind =>$val) <label class="radio-inline"> <input type="radio" name="Student[sex]" {{ isset($student->sex) && $student->sex == $ind ? 'checked' : '' }} value="{{ $ind }}"> {{ $val }} </label> @endforeach
在模板中加入<input name="_method" type="hidden" value="PUT"> 或许可以解决,我用到resource路由中的updatef方法
我的版本是5.5的。
参考这个 Laravel timestamps 设置为unix时间戳
在模型中修改 fromDateTime方法,让它在保存的时候保存为unix时间戳格式就可以了。
fromDateTime方法需要接收一个参数。为什么不return $val,可能是$val这个值的长度大于数据库中 updated_at 字段保存的值的最大长度(如果你是按照本教程创建的数据库的话)。time()函数则是一个unix格式戳,长度符合数据库的要求
public function fromDateTime($val) { return time(); }
或者可以直接删除模型中的 asDateTime方法,但是这样在模版中就不能使用date方法格式化时间
把student模型中的以下代码注释起来
// protected function asDateTime($val) {
// return $val;
// }
并将index.blade.php页面中的
<td>{{ date('Y-m-d', $student->created_at) }}</td>
更改为
<td>{{ $student->created_at }}</td>
//新增学生页面
Route::get('student/create', 'StudentController@create')->name('create');
//保存新增学生请求
Route::post('student/create', 'StudentController@create')->name('create');
{{ isset(old('Student')['sex']) && old('Student')['sex']==$ind ? 'checked':''}}
截图来自链接 http://www.imooc.com/video/12524 (视频4分42秒的时候)
我本来打算把截图里的最后一行简写成 {{x or y}} 的形式的,结果就发现这问题了。
也就是说
{{old('student')['name'] ? old('student')['name']: $student->name}}
不能简写成
{{old('student')['name'] or $student->name}}
不知道为什么不行啊?
性别应该是空的
old是一个 Illuminate/Foundation/helps.php 里的方法,你要确定你是否调用到了这个方法,或者是否正确调用了这个方法。。。还有,未定义常量这种问题可能的情况有好几个呢,或者是调用自定义方法但没有声明实现、或者是调用自带方法但没有正确引用相应的库,或者语法写的有问题等等。你不把出问题的代码部分贴出来很难给你解答的。。。
因为那个update的视图中的form表单里的每一个input的name是设定为Student[name/age/sex],一个以Student为名字的数组,所以当用户按了提交后,会回到update的function中去,然后在function中通过$request->input('Student')获取并将用一个data变量存好,再将data数组处理好,最后调用内置save()函数保存到数据库中
把表单的action改成""
通过修改老师的代码已经解决了问题了,感谢关注~
修改的路由会携带一个id参数,你要根据这个id获取Model,由于form是跟增加使用的一个,所以在input中的value在赋值时需要增加isset判断,然后提交。之所以提交没改变,其根本就是你没拿到id对应的Model,少这一步,希望对你有帮助。。
解决了吗?同求啊。。到底是差什么哦
如果是给$data增加变量,可以是$data[$key]=新变量,需要最后输出的话,在foreach结束后,在foreach外输出就可以啦。我不是很明白你的问题,有请楼下解答
没有发现路由,估计你在页面使用的url()方法,这样只能简单的生成XXX/id=XXX,推荐使用URL::action(),方法,这样第二个参数会表示成XXX?id=XXX,这种方式不需要修改路由,也不需要在方法中额外添加一个参数,而是使用Request对象来获取