Bonjour à tous,

Je viens à votre rencontre puisque j'ai un petit soucis avec Laravel... Je viens de commencer la formation de Grafikart sur le sujet... J'en suis au TP Raccourcisseur d'URL... J'ai réussi à faire le TP (mais bon, on est d'accord, il suffit de recopier le code ou presque...) et j'ai décidé que j'allais ajouter un champ "value" au formulaire pour avoir une URL du type : link/{value}... J'ai réussi à créer le formulaire, à insérer toutes les données comme il faut dans la base de données et à créer le bouton qui permet de renvoyer vers la page : link/{url} et là, ça coince...

J'ai une erreur : NotFoundHttpException in RouteCollection.php line 161

// Une partie de mon fichier route.php
Route::resource('link', 'LinksController', ['only' => ['create', 'store']]);
Route::get('link/{value}', ['as' => 'link.show', 'uses' => 'LinksController@show'])->where('value', '[a-z0-9]+');
// Mon  fichier LinksController.php
<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use Illuminate\Http\RedirectResponse;
use App\Link;

class LinksController extends Controller
{
    public function create() {
        return view('links.create');
    }

    public function store() {
        $url = \Request::get('url');
        $value = \Request::get('value');
        $link = Link::firstOrCreate(['url' => $url, 'value' => $value]);
        return view('links.success', compact('link'));
    }

    public function show($value) {
        $link = Link::findOrFail($value);
        return new RedirectResponse($link->url, 301);
    }
}

Si quelqu'un avait une idée du problème, ça m'aiderait vraiment ! :) Merci d'avance

2 réponses


Azorgh
Réponse acceptée

Hello,

Pour info, le paramètre de findOrFail est l'ID.
Je pense que tu devrais plutôt faire :

$link = Link::whereValue($value)->firstOrFail();
chloecorfmat
Auteur
Réponse acceptée

Merci pour ta réponse !

Bon, ça semble mieux... Par contre, j'ai une nouvelle erreur : BadMethodCallException in Builder.php line 2258:
Call to undefined method Illuminate\Database\Query\Builder::firstOfFail()
... Je pense qu'il faut que j'ajoute une ligne de ce type : use Illuminate\Database\Query\Builder; mais ça ne fonctionne pas... Je ne dois pas faire comme il faut... Désolée... As-tu la solution ? Et dans le cas où je n'aurais pas noté ce qu'il faut... Où est ce que je peux trouver cette info... J'ai tenté la doc sans succès... Merci

EDIT : Il semblerait que je sois blonde... Faute de frappe... "firstOfFail" au lieu de "firstOrFail"... C'est mieux comme ça ! ;) Merci beaucoup de ton aide !