我在Laravel中创建了一个基本的一对一关系,允许用户将徽标上传到个人资料。徽标存储在自己的表中。
我还将用户配置文件播种到我的数据库中,但我没有任何徽标。
我遇到的问题是,当我调用他们的个人资料并且没有徽标时,我收到了“试图获取非对象的属性”错误。我希望插入一个可以替代的股票标识,但我没有运气。
我的代码,在show.blade.php文件中是:
<div class="thumbnail">
@if ("{{ $contractor->logo->contractor_id }}" !== NULL)
<img src="../{{ $contractor->logo->name }}">
@else
<img src="../assets/images/logo.png">
@endif
</div>
作为参考,这是我的控制器动作:
public function logos($id)
{
$contractor = Contractor::find($id);
return View::make('contractors.logos')
->with('contractor', $contractor);
}
public function logo_upload($id){
$input = Input::all();
$rules = array(
'file' => 'image|max:3000',
);
$validation = Validator::make($input, $rules);
if ($validation->fails())
{
return Response::make($validation->errors->first(), 400);
}
$file = Input::file('file');
$destinationPath = 'uploads/logos';
$extension = $file->getClientOriginalExtension();
$filename = str_random(12).".{$extension}";
$upload_success = Input::file('file')->move($destinationPath, $filename);
$path = Input::file('file')->getRealPath();
if( $upload_success ) {
$logo = new Logo;
$logo->name = $destinationPath ."/". $filename;
$logo->contractor_id = (Input::get('contractor_id'));
$logo->save();
return Response::json('success', 200);
} else {
return Response::json('error', 400);
}
}
当相关表没有外键存在时,是否有更好的方法来交换占位符徽标? TIA
答案 0 :(得分:0)
这是我建议使用PHP的错误抑制运算符@
的少数几个点之一。
@if( @$contractor->logo->contractor_id )
<img src="../{{ $contractor->logo->name }}">
@else
<img src="../assets/images/logo.png">
@endif
另一个选择是首先检查$contractor->logo
:
@if( isset($contractor->logo) && $contractor->logo->contractor_id )
附注:Laravel中{{ }}
内不需要@if
。