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

#php #laravel-5.3

#php #laravel-5.3

Вопрос:

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

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

это то, из чего сделан мой profile.blade.php :

 <ul class="profile-rows">
    <li>
        <span class="the-label">Last visit: </span>
        <span class="the-value mark green">{{ CarbonCarbon::createFromFormat('Y-m-d H:i:s', $user->lastVisit)->diffForHumans(CarbonCarbon::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. Может быть, некоторые из переменных между {{ }} являются объектом? Попробуйте сбросить их все в контроллере.

2. $user->website Возможно, пустой? url() Вспомогательный метод предоставит вам экземпляр UrlGenerator , если вы не предоставите ему строку.

3. @jszobody вы правы. Отправьте свой ответ, пожалуйста

4. в моем случае я дал объект внутри {{ }}

Ответ №1:

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

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

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

Одним из простых решений было бы обернуть ваш html-фрагмент проверкой:

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

Ответ №2:

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

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

Ответ №3:

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