2016-05-19 3 views
0

Я хочу передать некоторые пользовательские данные в представление, чтобы оно отображалось на странице профиля. Это довольно много, но я не хочу просто передавать все, потому что есть некоторые вещи, к которым у представления не должно быть доступа. Таким образом, мой код выглядит так:Получите заданные свойства модели все сразу в Laravel

return view('profile', [ 
    'username' => Auth::user()->username, 
    'email' => Auth::user()->email, 
    'firstname' => Auth::user()->firstname, 
    'country' => Auth::user()->country, 
    'city' => Auth::user()->city->name, 
    'sex' => Auth::user()->sex, 
    'orientation' => Auth::user()->orientation, 
    'age' => Auth::user()->age, 
    'children' => Auth::user()->children, 
    'drinking' => Auth::user()->drinking, 
    'smoking' => Auth::user()->smoking, 
    'living' => Auth::user()->living, 
    'about' => Auth::user()->about, 
]); 

Мой вопрос: можно ли это написать короче/проще?

Спасибо!


EDIT:

Я не хочу этого: {{ Auth::user()->firstname }}, потому что есть логика в представлении, что плохо - я думаю, там должно быть только простые переменные, которые будут отображаться в а не что-то еще.

Так что я искал что-то вроде:

return view('profile', Auth::user()->only(['firstname', 'email', ...])); 
+0

Можете ли вы не просто передать пользователю ... например. return view ('profile', ['user' => Auth :: user()]), а затем в вашем представлении {{$ user-> usernmae}}, это, как правило, более чистый способ передать весь объект по определению каждого поля –

ответ

1

Вы можете создать самостоятельно метод с именем getPublicData и затем вернуть все необходимые вам свойства.

... 
public function getPublicData() { 
    return [ 
     'property_name' => $this->property_name 
    ]; 
} 
... 

... а затем использовать его в своем контроллере/представлениях. Возможно, это не оптимальное решение, но вы можете выделить эту вещь в модели и избежать слишком большого количества кода в контроллере.

Другим передовым подходом может быть переопределение метода __get. Однако I am not the first in this case.

Надеюсь, это поможет!

+0

Это то, о чем я думал с самого начала. Просто спросил, нет ли чего-то встроенного, которого я не знал. По-видимому, нет. Так что спасибо! –

-2

Вам не нужно передавать эти переменные в представление, вы можете напрямую обращаться к ним с точки зрения использования лезвие

<h1>{{ Auth::user()->username }}</h1> 
Смежные вопросы