web-dev-qa-db-fra.com

Laravel 5.3 - htmlspecialchars () s'attend à ce que le paramètre 1 soit une chaîne

Je suis nouveau à Laravel et je l'apprécie. Alors que je travaillais sur un projet de média social, j'ai eu cette erreur: htmlspecialchars() expects parameter 1 to be string, object given (View: C:\wamp64\www\histoirevraie\resources\views\user\profile.blade.php)

J'ai vérifié certaines questions sur ce site mais je n'ai trouvé aucune question qui résolve mon problème.

voici en quoi consiste mon 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>

Toutes les informations sur l'utilisateur sont données par un contrôleur:

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

Aidez-moi à résoudre ce problème!

11
Prince

Je pense que votre $user->website est vide/vide.

Si vous examinez la méthode d'assistance url() , Laravel renverra un instance de UrlGenerator si $path est null.

Donc, dans votre cas, si $user->website est vide, vous obtiendrez UrlGenerator et donc votre erreur concernant htmlspecialchars obtenir un objet.

Une solution simple serait d’envelopper votre morceau html avec un chèque:

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

Dans mon cas, j’ai utilisé une fonction dans un fichier lame telle que $brand->products() et elle retournait un tableau, c’est pourquoi je voyais le message.

quand j'ai changé mon code et renvoyant une chaîne, l'erreur était partie.

4
sh6210
  1. Vérifiez votre formulaire HTML et votre entrée que vous envoyez des données de tableau. Par conséquent, ils donnent cette erreur. Envoyez donc les données au format chaîne, convertissez-les en tableau puis envoyez-lui la méthode post.
0
user11021898

J'obtenais cela parce qu'à mon avis j'utilisais $errors->get('username') pour afficher les erreurs mais get() renvoie un tableau. Le passage à $errors->first('username') a résolu ce problème.

0
braed