我的laravel和我的表格有问题。
在我的表单(createBand.blade.php)中,我创建了一个带有下拉列表的表单,该表单调用数据库表:musicalGenre。
应该注意的是,dropdownmenu / list(选择表单)会调用名为 MusicalGenre 的数据库中的另一个表,而我希望下拉列表的表单是在数据库表 Bands 中注册一个频段。
选择表格有效,我可以在播种后在下拉列表中选择我桌子中的所有musicalGenre_name。这是刀片页面代码(当然我已打开,关闭表单和laravel要求的部分):
<p>
{{Form::label('name','Name of the Band: ')}}
{{Form::text('name',Input::old('name'))}}
</p>
@if ($errors->has('name'))
<p class='error'> {{ $errors->first('name')}}</p>
@endif
<br>
<br>
<p>
{{Form::label('email','Band Email: ')}}
{{Form::text('email',Input::old('email'))}}
</p>
@if ($errors->has('email'))
<p class='error'> {{ $errors->first('email')}}</p>
@endif
<br>
<br>
<p>
{{Form::label('musicalGenre','your style: ')}}
{{Form::select('musicalGenre_name', $genre_options = array('' => 'select your style') + musicalGenre::lists('name'), Input::old('musicalGenre_name')) }}
</p>
@if ($errors->has('musicalGenre'))
<p class='error'> {{ $errors->first('musicalGenre_name')}}</p>
@endif
<br>
<br>
我有一个名为createBandController的控制器,其中我为刀片表单的验证器制定了一些规则。问题是: 我不能通过验证器,也就是说,即使我在我的下拉列表中选择了一个音乐类型,因为laravel没有选择。
我有错误“需要音乐流派”。 我不理解我的控制器中选择表单的验证器规则,或者我不知道我在音乐类型规则中输入的是什么。这是控制器代码:
public function createBand() {
$result = MusicalGenre::all();
$genre = $result->lists('name');
$inputs = Input::all();
$rules = array(
'name' => 'required|between:1,64|unique:bands,name',
'email' => 'between:1,128|email|unique:bands,email',
'musicalGenre' => 'integer|required|in:musicalGenre'
);
$validation = Validator::make($inputs, $rules);
if ($validation->fails()) {
return Redirect::to('createBand')->withInput()->withErrors($validation)
->with('alert_error', 'you have some mistakes');
不要注意名字,(我是法国人,为了让你清楚,我改了它们),我确信这是我的下拉列表的验证者我填写表格时会出现问题,因为我无法通过。在我的原始项目代码中,没有拼写错误。
我的所有验证器和变量名都有效。 我认为我需要为选择表单输入和验证器找到正确的规则,以便laravel知道我在我的下拉列表中选择时做出了选择。
首先,我想指定,下拉列表使用数据库表musicalGenre 。就像我指定一些字段在数据库表 Bands 中,如下所示:
'name' => 'required|between:1,64|unique:bands,name'
这里,“name”是数据库表Bands的一个字段。但它也没有用。
如果有人有解决方案或想要帮助,我很感兴趣。 谢谢(对不起,如果我的英语看起来那么糟糕)。
答案 0 :(得分:2)
验证规则:在现场音乐剧上,人们不会按照你实现它的方式工作。它期望以逗号分隔的字符串列表,其中字段值被清除。
例如,如果字段为'Gender'
,则验证将为:
'gender' => 'in:male,female'
要针对模型验证musicalGenre,您需要编写自定义验证器。见http://laravel.com/docs/validation#custom-validation-rules
我目前正在为此'belongs_to'
验证编写自定义验证器,当我开始工作时,我会在此处发布。
<强>更新
我编写了一个应该有用的自定义验证规则。首先创建一个validators.php
文件并将其包含在global.php
require app_path().'/validators.php';
在validators.php
内创建自定义规则:
Validator::extend('exists_in', function($attribute, $value, $parameters)
{
$result = $parameters[0]::find($value);
return ($result == null) ? FALSE : TRUE;
});
在您的验证中,您现在可以:
'musicalGenre' => 'integer|required|exists_in:musicalGenre'
exists_in验证采用Model Class名称的参数
要为此验证提供错误消息,请将以下内容添加到app/lang/en/validation.php
中的数组:
"exists_in" => "The selected :attribute is invalid."
答案 1 :(得分:0)
是否存在:musicalGenre而不是:musicalGenre help?