【问题标题】:How to validation slug in laravel 5.4.24如何在 laravel 5.4.24 中验证 slug
【发布时间】: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, '-');

谢谢。

【问题讨论】:

    标签: php laravel laravel-5.4 slug


    【解决方案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-&gt;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);
        
        }
        

        【讨论】:

          猜你喜欢
          • 2010-10-30
          • 2015-04-24
          • 2016-12-05
          • 2012-02-09
          • 2016-01-17
          • 2022-12-14
          • 2017-01-20
          • 2017-07-04
          • 2019-10-02
          相关资源
          最近更新 更多