Как разделить проблемы между моделью и представлением в Laravel? - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь придумать чистый код для моего простого приложения Laravel.У меня есть представление (user.blade.php) для отображения сведений о пользователе:

<div class="name">
    <label>Name</label>
    <span class="value">{{ $user->name }}</span>
</div>
<div class="address">
    <label>Address</label>
    <span class="value">
        <span class="line1">{{ $user->address_line_1 }}</span>
        @if ($user->address_line_2 !== null)
            <span class="line2>>{{ $user->address_line_2 }}</span>
        @endif
    </span>
</div>
<div class="phone">
    <label>Phone numbers</label>
    <span class="value">
        @if ($user->phone_main !== null)
            <span class="main">{{ $user->phone_main }}</span>
        @endif
        @if ($user->phone_alt !== null)
            <span class="alt">{{ $user->phone_alt }}</span>
        @endif
    </span>
</div>

У некоторых пользователей есть только одна адресная строка, у некоторых - две (которые я моделирую, используя два столбца, address_line_1 и address_line_2,последний может быть обнуляемым), некоторые имеют 0 телефонных номеров, другие имеют 1 или 2 (снова два столбца, phone_main и phone_alt, оба из которых могут быть обнуляемыми).

Поскольку я хочу правильно отформатированный адресинформация о линии и номере телефона, я использую директивы blade @if, чтобы гарантировать, что <span> s появляются, только если они содержат какую-либо информацию.Лучшие практики (насколько я знаю) диктуют, что представление не должно «делать так много», но я не думаю, что смогу правильно инкапсулировать это поведение в красноречивый атрибут (function getFormattedAddressAttribute в классе User)потому что я оборачиваю элементы в теги HTML и не хочу, чтобы моя модель знала о HTML.

У меня вопрос: каково общее руководство для решения этой ситуации?Должен ли я:

  1. сохранить свое решение?
  2. вытащить части представления, которые отображают адрес и номера телефонов, в частичные представления и включить их в этот основной вид?
  3. делать что-то еще?

1 Ответ

0 голосов
/ 12 октября 2018

По-моему, в вашем контроллере вы могли бы написать переменную, которая создаст ваш форматированный адрес для вас.

$formattedAddress = $user->address_line_1;

if($user->address_line_2 !== null){
  $formattedAddress .= "<br>" . $user->address_line_2;
}

И то же самое с телефонными номерами.Вы можете вернуть их с вашим видом:

return view ('user.details')->with("formattedAddress", $formattedAddress);

Очевидно, что нужно будет стилизовать под ваш вкус и требования, но это может работать для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...