Laravel 5.3 - htmlspecialchars() ожидает, что параметр 1 будет строкой

Я новичок в laravel, и мне это нравится. Во время работы над проектом в социальных сетях я получил эту ошибку: htmlspecialchars() expects parameter 1 to be string, object given (View: C:\wamp64\www\histoirevraie\resources\views\user\profile.blade.php)

Я проверил несколько вопросов на этом сайте, но я не нашел вопроса, который решает мою проблему.

это то, что мой profile.blade.php состоит из:

<ul class="profile-rows">
    <li>
        <span class="the-label">Last visit: </span>
        <span class="the-value mark green">{{ \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $user->lastVisit)->diffForHumans(\Carbon\Carbon::now())}}</span>
    </li>
    <li>
        <span class="the-label">Member since: </span>
        <span class="the-value mark light-gray">{{ $user->created_at->format('F Y') }}</span>
    </li>
    <li>
        <span class="the-label">Profile views: </span>
        <span class="the-value mark light-gray">5146</span>
    </li>
    <li>
        <span class="the-label">Living In: </span>
        <span class="the-value">{{ $user->town }}</span>
    </li>
    <li>
        <span class="the-label">Website: </span>
        <span class="the-value"><a href="{{ url($user->website) }}">{{ $user->website }}</a></span>
    </li>
</ul>

Вся информация о пользователе предоставляется контроллером:

public function index($username){
        $user = User::where('username', $username)->first();
        return view('user.profile', compact('user'));
    }

Пожалуйста, помогите мне решить эту проблему!

Ответ 1

Я думаю, что ваш $user->website пуст/пуст.

Если вы посмотрите на url(), Laravel вернет экземпляр UrlGenerator, если $path имеет значение null.

Итак, в вашем случае, если $user->website пуст, вы получите UrlGenerator назад и, следовательно, свою ошибку в отношении htmlspecialchars получения объекта.

Одним простым решением было бы обернуть чек html с помощью проверки:

@if($user->website)
    <li>
        ...
    </li>
@endif

Ответ 2

В моем случае я использовал функцию внутри файла blade файла, например $brand->products(), и он возвращал массив, поэтому я видел сообщение.

когда я изменил свой код и вернул строку, ошибка исчезла.

Ответ 3

Я получил это, потому что, по моему мнению, я использовал $errors->get('username') чтобы показать ошибки, но get() возвращает массив. Переключение на $errors->first('username') исправило это.

Ответ 4

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