Laravel -5:如何获取表单输入以进行验证(除其他外...)?

时间:2015-10-13 18:28:11

标签: php validation laravel laravel-5

我有一些问题。

  1. 我似乎无法在表单输入中显示已保存的数据。
  2. 我无法让我的网址验证独特性。
  3. 我的控制器代码看起来非常多余。
  4. 获取验证唯一的网址具有优先权。

    此外,我创建了用于与用户一对多关系共享社交链接的表。我认为那是正确的。如果没有,请纠正我。

    更新只是一个想法...我想我可能只会因为只有一个'类型'柱。如果我为每种类型的链接都有一个列,比如facebook col,twitter col等,那会更容易。如果用户没有为某些服务提供信息,我就不想要空列 继承我的代码:

    更新我放弃了,只为不同类型的网址添加了单独的列,并更改为一对一的关系。

    形式

    public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
      Log.d("", " " + datePicker.getTag());
    // based on the returned tag you can decide what to do...
    
    }
    

    控制器

    {!! Form::model($user_links,['method' => 'PATCH', 'action'=> ['UserController@update_social']]) !!}
                    <div class='row form-group'>
                        <div class='col-md-2'>
                            {!! Form::label('facebook', 'Facebook Username') !!}
                        </div>
                        <div class='col-md-7'>
                            {!! Form::text('facebook', '',['class'=>'form-control']) !!}
                        </div>
                    </div>
                    <div class='row form-group'>
                        <div class='col-md-2'>
                            {!! Form::label('twitter', 'Twitter Username') !!}
                        </div>
                        <div class='col-md-7'>
                            {!! Form::text('twitter', null,['class'=>'form-control']) !!}
                        </div>
                    </div>
                    <div class='row form-group'>
                        <div class='col-md-2'>
                            {!! Form::label('reddit', 'Reddit Username') !!}
                        </div>
                        <div class='col-md-7'>
                            {!! Form::text('reddit', null,['class'=>'form-control']) !!}
                        </div>
                    </div>
                    <div class='row form-group'>
                        <div class='col-md-3'>
                            {!! Form::submit('Save Changes',['class'=>'btn btn-md btn-success']) !!}
                        </div>
                    </div>
                    {!! Form::close() !!}
    

    我的模型文件

        public function show_social(Request $request){
          $user_links= $request->user()->links;
          return view('user.edit.social_connect',compact('user_links'));
        }
    
        public function update_social(SocialRequest $request){
          $facebook= Input::get('facebook');
          $twitter= Input::get('twitter');
          $reddit= Input::get('reddit');
          $user = $request->user();
    
          $this->validate($request,['url'=>'unique']);
    
          if(Input::has('facebook')||Input::has('google')||Input::has('reddit')||Input::has('twitter'))
          {
            if($facebook != ""){
              $link = new SocialLinks();
              $link->type = 'facebook';
              $link->url='https//www.facebook.com/'.$facebook;
              $link->user_id=$user->id;
              $link->save(); 
            }
            if($twitter != ""){
              $link = new SocialLinks();
              $link->type = 'twitter';
              $link->url='https//www.twitter.com/'.$twitter;
              $link->user_id=$user->id;
              $link->save(); 
            }
            if($reddit != ""){
              $link = new SocialLinks();
              $link->type = 'reddit';
              $link->url='https//www.reddit.com/user'.$reddit;
              $link->user_id=$user->id;
              $link->save(); 
            }
            return Redirect::back()->with('message','Your profile has been updated');     
          }
            return Redirect::back();
    
        }
    

    我的要求

    <?php
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    use Eloquent;
    
    class SocialLinks extends Eloquent{
    
        protected $table= 'social_links';
    
        protected $fillable=[
            'type',
            'url'                                       
        ];
        public function user()
        {
            return $this->belongsTo('App\User');
        }
    
    }
    ?>
    

1 个答案:

答案 0 :(得分:2)

好的,这里有一些问题。您的请求文件使用不正确。你需要一个模型,除非当然你只是把“请求文件”和“模型”搞混了。出于本评论的目的,我将在控制器中使用Laravel的验证方法。

值得注意的是,您的“网址”不在表单中。验证在请求中查找“url”参数,但由于您似乎没有在表单中发送它,因此它非常冗余。此外,当您使用“唯一”验证器时,您需要提供一个数据库表来搜索并检查提供的值,在这种情况下;网址。

我已经添加了,但是,实际上它没有做任何事情,因为在您在表单中提供它之前,url将始终为空,因此请求将始终通过。

public function show_social(Request $request)
{
  $user_links = $request->user()->links;
  return view('user.edit.social_connect', compact('user_links'));
}

public function update_social(Request $request)
{
  $facebook = $request->facebook;
  $twitter = $request->twitter;
  $reddit = $request->reddit;
  $user = $request->user();

  $this->validate($request, [
        'url' => 'unique:social_links,column',  
  ]);

  if($request->has('facebook') || $request->has('google') || $request->has('reddit') || $request->has('twitter'))
  {
    if($facebook != ""){
      $link = new SocialLinks();
      $link->type = 'facebook';
      $link->url = 'https//www.facebook.com/'.$facebook;
      $link->user_id = $user->id;
      $link->save(); 
    }
    if($twitter != ""){
      $link = new SocialLinks();
      $link->type = 'twitter';
      $link->url = 'https//www.twitter.com/'.$twitter;
      $link->user_id = $user->id;
      $link->save(); 
    }
    if($reddit != ""){
      $link = new SocialLinks();
      $link->type = 'reddit';
      $link->url = 'https//www.reddit.com/user'.$reddit;
      $link->user_id = $user->id;
      $link->save(); 
    }
    return Redirect::back()->with('message','Your profile has been updated');     
  }
    return Redirect::back();

}

正如你所看到的,我删除了你的请求的类型提示,因为你实际上在做什么(从我能说的),是提示模型的类型。您提供的“请求文件”是一个模型,应该位于App /目录中,并使用命名空间引用。

如果您确实使用该文件作为模型,那么您的关系看起来没问题,当然假设您在数据库中设置了正确的外部列,并引用了用户表。

至于您的模型绑定不起作用,您是否尝试过转储$ user_links变量,如下所示:dd($ user_links); - 看它是否真的包含任何东西?当你在那里使用请求时,我无法分辨你获取信息的位置。

希望这有帮助,如果您有任何其他问题,请随时提出。