我有一些问题。
获取验证唯一的网址具有优先权。
此外,我创建了用于与用户一对多关系共享社交链接的表。我认为那是正确的。如果没有,请纠正我。
更新只是一个想法...我想我可能只会因为只有一个'类型'柱。如果我为每种类型的链接都有一个列,比如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');
}
}
?>
答案 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); - 看它是否真的包含任何东西?当你在那里使用请求时,我无法分辨你获取信息的位置。
希望这有帮助,如果您有任何其他问题,请随时提出。