2014-02-21 2 views
2

Существует несколько способов передачи данных в режим Laravel Blade.Laravel: объект или другие структуры (массив, json ..) к представлению?

В этом подкованных дискуссии Laravel hidden attributes. e.g. Password - securityAntonio Carlos Ribeiro состояния (и я согласен), что:.

«Вы не должны передавать объекты на вид В паттерне MVC, вид должен получить данные, которые по отношению к ним, обработанные данные, а не объекты, потому что им не нужно ничего знать о вашей бизнес-логике ».

Я учусь Laravel и везде я смотрю я часто вижу примеры, как:

$users = User::all(); 
return View::make('users')->with('users', $users); 

Это одна специально поставляется из official documentation.

Какой метод должен быть в идеале использовать?
Преобразуете ли вы объекты в массив или другие форматы перед отправкой их на просмотр?
Вы выборочно очищаете свои данные от всех ненужных значений до передачи его в механизм шаблонов?
А что, возможно, академически неправильно, каковы потенциальные риски для передачи объекта в представление?

+0

Один из рисков заключается в том, что если у вас есть полный доступ к вашим моделям Eloquent в представлении, у вас может возникнуть соблазн использовать их. Ленивая загрузка будет распространенным злоупотреблением. –

ответ

0

Если вы используете следующий подход

$users = User::all(); 
return View::make('users')->with('users', $users); 

Вы получите коллекцию User объектов в вашей модели и может использовать loop распечатать все User объекты, и это хорошо, какой риск может делать это , это на вас, так что вы должны знать, что следует делать, но если вы не хотите, чтобы передать объект коллекции, то это также можно передать только массив массивов с использованием:

$users = User::all()->toArray(); 
return View::make('users')->with('users', $users); 

Итак, вы получите массив массивов в представлении, где каждый дочерний массив будет содержать детали пользовательского пользователя. Массив может выглядеть примерно так:

array (size=2) 
    0 => 
    array (size=5) 
     'id' => int 1 
     'username' => string 'heera' (length=5) 
     'email' => string '[email protected]' (length=21) 
     'created_at' => string '2014-01-20 06:10:53' (length=19) 
     'updated_at' => string '2014-01-23 10:23:50' (length=19) 
    1 => 
    array (size=5) 
    'id' => int 2 
    'username' => string 'usman' (length=5) 
    'email' => string '[email protected]' (length=16) 
    'created_at' => string '2014-01-20 06:10:53' (length=19) 
    'updated_at' => string '2014-01-20 09:06:23' (length=19) 

Но, вы можете использовать традиционный способ в Laravel и нет никакого риска вообще. Не следите за чем-то слепо, используйте свой смысл и спросите себя, какой риск он может подняться для вас. Вы только собираетесь зацикливать коллекцию, больше ничего. Теперь выбор - ваш, если вы передаете коллекцию, вы можете использовать объектную нотацию, т. Е. $user->username, но если вы передадите массив, вы должны использовать что-то вроде $user['username'], вот и все.

Смежные вопросы