Laravel:如何根据Model属性的可能值验证表单字段?

时间:2016-11-18 11:27:00

标签: php forms laravel

我正在对表单进行验证,用户可以在其中选择一系列值(基于模型中的一组条目)

E.g。我有Model CfgLocale(id,name)

我希望有类似的东西:

CfgLocale-> listofAvailableIds():返回一个数组

我做的是:

Inside Model这个方法:

class CfgLocale extends Model
{
    protected $table = 'cfg_locales';



    public static function availableid()
    {
        $id_list = [];
        $res = self::select('id')->get();
        foreach($res as $i){
            $id_list[] = $i->id;
        }

        return $id_list;
    }
}

在Controller上进行验证我会这样做:

$this->validate($request, [
    'id'                => 'required|integer|min:1',
    ...
    'locale'  => 'required|in:'.implode(',', CfgLocale::availableid()),
]);

有没有更好的创意或Laravel标准来完成这项工作?

由于

3 个答案:

答案 0 :(得分:2)

您可以使用exists rule laravel。您可以定义验证规则,如下所示。可能会有所帮助。

'locale' => 'exists:cfg_locales,id'

答案 1 :(得分:1)

请改用此代码,

class CfgLocale extends Model
{
    protected $table = 'cfg_locales';

    public static function availableid()
    {
        return $this->pluck('id')->toArray();
    }
}

pluck方法从您的表格中选择id列,toArray方法将您的模型object collection转换为array

了解Laravel Collections here的更多信息。

答案 2 :(得分:0)

这将返回一组ID:

public static function availableid()
{
    return $this->pluck('id')->toArray();
}

https://laravel.com/docs/5.3/collections#method-pluck https://laravel.com/docs/5.3/collections#method-toarray