情况:我获取了插入新数据并通过表单更新数据的数据。 因此,在表单中,如果用户尚未完成任何数据,则输入文本仅显示占位符。如果用户之前已经存储了数据,则输入文本显示已存储的数据,用户可以在必要时更新它们。
在我的控制器中,我从四个不同的表(模型)中检索数据。所以我首先实例化模型并检索数据,同时检查用户是否已经存储了每列的数据:
这是控制器代码:
//recuperar el id del usuario
$id_user=Auth::user()->id;
$usuario=User::find($id_user);
if(isset($usuario->nombre_pila)){$nombrepila=$usuario->nombre_pila;}else{$nombrepila='';}
if(isset($usuario->ap_paterno)){$ap_paterno=$usuario->ap_paterno;}else{$ap_paterno='';}
//obtener datos de domicilio del usuario -------------------------------------------------------------------
/**/$domicilio=$usuario->domicilio;/**/
if(isset($domicilio->callenumero)){$callenumero=$domicilio->callenumero;}else{$callenumero='';}
if(isset($domicilio->colonia)){$colonia=$domicilio->colonia;}else{$colonia='';}
//----------------------------------------------------------------------------------------------------------
//obtener datos de empresa en donde trabaja el usuario
/**/$empresa=$usuario->empresa;/**/
if(isset($empresa->nombre)){$nomempresa=$empresa->nombre;}else{$nomempresa='';}
if(isset($empresa->puesto)){$puesto=$empresa->puesto;}else{$puesto='';}
//----------------------------------------------------------------------------------------------------------
//Obtener datos de estudios realizados
/**/$estudios=$usuario->estudio;/**/
if(isset($estudios->L_licenciatura)){$L_licenciatura=$estudios->L_licenciatura;}else{$L_licenciatura='';}
if(isset($estudios->L_titulo)){$L_titulo=$estudios->L_titulo;}else{$L_titulo='';}
(检索到更多变量......)
然后我将此数据发送到视图:
return View::make('profile.edit2',array('id_user'=>$id_user, 'nombrepila'=>$nombrepila,'ap_paterno'=>$ap_paterno,
'callenumero'=>$callenumero,'colonia'=>$colonia,'nomempresa'=>$nomempresa,'puesto'=>$puesto,'L_licenciatura'=>$L_licenciatura,
'L_titulo'=>$L_titulo));
我重复了两次这段代码。我的问题是,我怎样才能使这个函数成为一个函数,所以我不必重复这段代码呢?
我想这个函数应该返回一个数组。我该怎么办?
如何不重复View::Make
长数组
答案 0 :(得分:1)
你可以试试这个:
在你的模特上
public function getTemplateData(){
return array('id_user' => $this->id,$some_fields->$this->thatfield,...);
}
回到控制器
$model = User::find($id_user)
return View::make('profile.edit2',$model->getTemplateData());
值得一提的是,Laravel已经内置了这种模式。请阅读本节(将模型转换为数组)http://laravel.com/docs/4.2/eloquent#converting-to-arrays-or-json
答案 1 :(得分:1)
这里有几个问题。
一,你正在使用Authfaçade提供的用户对象来重新获取同一个用户,除非你专门加载一大堆关系(你不是这样),这几乎是毫无意义的。
其次,您将一大堆属性提取到变量中,然后将它们压缩为视图的数组。您可以将用户直接传递到视图中。
尝试:
return View::make('profile.edit2',array('user'=>Auth::user()));
然后只访问视图中用户的属性。
提示:虽然在eloquent模型中的属性上的isset将返回true或false,如果您只是直接访问它,它将不会抛出未定义属性的通知,而只是{{1} }与代码中的null
具有相同的效果。