当验证在laravel 5中返回false时如何获取选项值的名称

Posted

技术标签:

【中文标题】当验证在laravel 5中返回false时如何获取选项值的名称【英文标题】:How to get name of an option value when validation returns false in laravel 5 【发布时间】:2016-05-10 07:50:57 【问题描述】:

在一个表单中我有多个选项

<div class="form-group">
                    <label>Seasons</label>
                    <select class="form-control" name="year_code" required>
                        <option value=" Input::old ('year_code') "
                                selected> Input::old ('year_code') </option>
                        <div class="divider"></div>
                        <option value="16">2016-2017</option>
                        <option value="17">2017-2018</option>
                        <option value="18">2018-2019</option>
                        <option value="20">2020-2021</option>

                    </select>
                </div>

如果由于错误的值而导致验证失败(php 端验证) 我的表单返回旧输入,假设选择了 2016-2017 赛季 如果我的表单失败,返回值将是 16 并且会显示出来。 我可以做多个 if 语句,例如

@if(\Input::get(year_code) == 16) 
show 2016-2017
@elseif (\Input::get(year_code) == 17)
show 2017-2018
... 
@endif 

但我正在寻找更有效的方法来获取值的名称。

【问题讨论】:

【参考方案1】:

不要硬编码,而是将它们保存在一个多维数组中,这样您就可以更轻松地进行操作。

$arr = [
   ["value" => 16, "text" => "2016-2017"],
   ["value" => 17, "text" => "2017-2018"],
   ["value" => 18, "text" => "2018-2019"]
   ...
];

使用 ViewComposer 将该数据传递给您的视图。

@foreach($arr as $entry)
   @if((int) Input::old('year_code') === $entry['value'])
       <option value=" $entry['value'] " selected> $entry['text'] </option>
   @else
       <option value=" $entry['value'] "> $entry['text'] </option>
   @endif
@endforeach

此外,似乎值可以自动生成。我会亲自创建一个看起来像这样的日期迭代器。 (伪)

public function getYears(int $diff): array 
    $start    = Date::today()->startOfYear();
    $end      = Date::today()->addYears($diff)->startOfYear();
    $response = [];

    $start->diffInYears($end, function ($year) use (&response) 
        $response[] = sprintf("%s - %s", $year->format("Y"), $year->addYear()->format("Y"));
    );

    return $response;

【讨论】:

【参考方案2】:
<div class="form-group">
<label>Seasons</label>
<select class="form-control" name="year_code" required>
    <option value="16" \Input::get(year_code)==16?'selected':''>2016-2017</option>
    <option value="17" \Input::get(year_code)==17?'selected':''>2017-2018</option>
    <option value="18" \Input::get(year_code)==18?'selected':''>2018-2019</option>
    <option value="20" \Input::get(year_code)==20?'selected':''>2020-2021</option>

 </select>
 </div>

【讨论】:

在这种情况下,三元语句和 if 语句没有区别,我想我正在寻找一种有效的方法,可能会根据值以某种方式使用 javascript 获取名称。

以上是关于当验证在laravel 5中返回false时如何获取选项值的名称的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Auth::attempt 在 Laravel 5.3 中总是返回 false?

如何在移动应用程序的 Web 服务中使用 Laravel 5.4 验证器

laravel 5.1 表单验证如何验证数组里面的

Laravel 5 Auth::attempt() 总是返回 false

如何在 Laravel 5 中登录时检查用户状态?

Laravel 5.3记住我身份验证问题