如何在 laravel 5.4.24 中验证 slug
Posted
技术标签:
【中文标题】如何在 laravel 5.4.24 中验证 slug【英文标题】:How to validation slug in laravel 5.4.24 【发布时间】:2017-11-19 22:51:40 【问题描述】:如何在 laravel 中创建唯一的 slug 并验证它们?
这是我的验证码:
$this->validate($request,[
'company_name' => 'required|unique:admin_users,company_name,slug|max:191',
]);
这是我的 slug 代码:
$db_filed->company_name = str_slug($request->company_name, '-');
谢谢。
【问题讨论】:
【参考方案1】:我正在尝试这种方式,现在可以了,
代码形式如下:
<div class="form-group">
<input type="text" class="form-control" placeholder="Company Name" name="company_name" value=" ucwords(str_replace('-',' ',old('company_name'))) " required>
</div>
这是控制器代码:
public function store(Request $request)
$request['company_name'] = str_slug($request->company_name, '-');
$this->validate($request,[
'company_name' => "required|unique:admin_users,company_name|max:191",
]);
$db_filed = new AdminUser;
$db_filed->company_name = $request->company_name;
$db_filed->save();
【讨论】:
【参考方案2】:设置一个 FormRequest 以使用如下规则对路由进行验证:
https://laravel.com/docs/5.4/validation#form-request-validation
public function rules()
return [
'company_name' => 'required|unique:admin_users,company_name,slug|max:191'
];
或者您需要先创建 slug,然后再将其分配给公司名称。
https://laravel.com/docs/5.4/validation#manually-creating-validators
$slug = str_slug($request->company_name, '-');
$validator = Validator::make(['company_name' => $slug], [
'company_name' => 'required|unique:admin_users,company_name,slug|max:191'
]);
if (!$validator->fails())
$db_filed->company_name = $slug;
$db_filled->save();
【讨论】:
您好 Btl,感谢您的宝贵回复。我正在尝试这两种方法,但没有奏效。但是其他字段是有效的,就像电子邮件和电话一样,这些字段是验证和检查的唯一字段。我不明白为什么 slug 验证不起作用... 你能举一个真实输入数据的例子和一个失败的公司名称的例子吗? 这是表单:prnt.sc/fkspf6 这是控制器:prnt.sc/fkspn6 我尝试了这两种方法,然后我撤消了这些方法,这是我尝试之前的旧代码。 在将请求对象传递给验证器时使用$request->all()
。
嗯,好吧,我的错误.. 它是否提供有关失败输入的任何信息?【参考方案3】:
您可以在其中创建自定义规则来实现此目的。这样的事情就足够了:
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Support\Str;
class Slug implements Rule
public function passes($attribute, $value): bool
$validSlug = (string) Str::of($value)->slug('-');
return $value === $validSlug;
public function message(): string
return 'The :attribute must be slug formatted.';
【讨论】:
【参考方案4】:你可以像这样在你的控制器中创建 slug 可能在 store 函数中
public function store(CompanyNameRequest $request)
$slug = uniqid();
$ticket = new CompaanyName(array(
'title' => $request->get('title'),
'content' => $request->get('content'),
'slug' => $slug
));
$ticket->save();
return redirect('/contact')->with('status', 'Your order is been proccess! Its unique id is: '.$slug);
【讨论】:
以上是关于如何在 laravel 5.4.24 中验证 slug的主要内容,如果未能解决你的问题,请参考以下文章