我有一个名为words的表(名为word的列),其中包含一堆禁止/阻止的单词。用户被要求在注册时输入用户名,我们会检查用户选择的用户名中是否有任何禁止/阻止的用户。
我想知道雄辩是否有办法让我进行搜索......
因此,例如,如果单词表在单词列中包含以下条目,则这些单词不能在用户名中...
因此,如果选择的用户名是" tychirply",它应该被拒绝,因为它有啁啾声。
我想,通过返回字符串常量中存在的任何行,eloquent可能有办法做到这一点,否则我必须通过PHP拉出所有单词并处理检查。
我正在运行laravel 5.3,这就是我现在的做法....
$search_words = Words::where('is_badname', true)->get();
foreach($search_words as $search_word)
{
if (strpos($word, $search_word->word) !== false)
{
return true;
}
}
答案 0 :(得分:0)
最好的方法是根据此https://laravel.com/docs/5.5/validation#custom-validation-rules创建自己的验证规则,它可能是这样的:
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
use App\Words;
class BannedWords implements Rule
{
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
$words = Words::where('is_badname', true)->get();
return (strpos($word, $words->toArray()) !== false);
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'This word is forbidden.';
}
}