繁体   English   中英

Laravel -5:我如何获取表单输入以进行验证(以及其他功能)?

[英]Laravel -5: How do I get my form inputs to validate (among other things..)?

我有几个问题。

  1. 我似乎无法在表单输入中显示保存的数据。
  2. 我无法获取自己的网址来验证唯一性。
  3. 我的控制器代码看起来非常多余。

不过,获取URL来验证唯一性是一个优先事项。

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

更新只是一个想法...我想我可能只是通过一个“类型”列来使事情复杂化。 如果为每种链接类型(例如,facebook col,twitter col等)创建一列,会更容易。如果用户不提供某些服务的信息,我只是不想空列,这是我的代码:

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

形成

{!! 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');
    }

}
?>

我的请求

<?php
namespace App\Http\Requests;

use App\Http\Requests\Request;

class SocialRequest extends Request
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }


    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {

            return [
                'url'=>'unique|user_id'      
                ];
            }

}

好的,这里有些错误。 您的请求文件使用不正确。 为此,您需要一个模型,除非您只是将“请求文件”和“模型”混在一起。 出于此注释的目的,我将在控制器内部使用Laravel的验证方法。

值得注意的是,您的“ URL”不存在于表单中。 验证将在请求中查找“ 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); -看它是否真的包含任何东西? 当您在此处使用请求时,我无法告诉您从何处获取信息。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM