[英]Laravel -5: How do I get my form inputs to validate (among other things..)?
我有几个问题。
不过,获取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.