laravel 4.1中数据库select / dropdownmenu(在表单中)的验证器规则

时间:2014-05-13 12:17:14

标签: php select drop-down-menu laravel-4 validation

我的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的一个字段。但它也没有用。

如果有人有解决方案或想要帮助,我很感兴趣。 谢谢(对不起,如果我的英语看起来那么糟糕)

2 个答案:

答案 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?