我有几个问题。
- 我似乎无法在表单输入中显示保存的数据。
- 我无法让我的url验证唯一。
- 我的控制器代码看起来非常冗余。
让url验证唯一优先。
我还创建了一个表,用于与用户共享一对多关系的社会链接。我认为这是正确的。如果没有,请纠正我。
update只是一个想法…我认为我可能是复杂的事情,只有一个单一的"类型"列。这将是更容易,如果我有一个列的每一种类型的链接,即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() !!}
<<p> 控制器/strong> 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();
}
my model file
<?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');
}
}
?>
my request
<?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'
];
}
}
好吧,这里有一些错误。您的请求文件被错误地使用。你需要一个模型,当然,除非你只是把"请求文件"answers"模型"弄混了。为了这个注释的目的,我将在控制器中使用Laravel的验证方法。
值得注意的是,你的"url"没有出现在表单中。验证在请求内部查找"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变量,像这样:-看看它是否真的包含任何东西?因为你在这里使用请求,我不知道你从哪里得到的信息。
希望这对你有帮助,如果你还有什么问题,请随时提问。