Connexion
S'inscrire
Actualités
Quoi de neuf
Activités générales
Auteurs
Forums
Nouveaux messages
Rechercher un forum
Quoi de neuf
Nouveaux messages
Nouveaux messages de profil
Activités générales
Membres
Membres inscrits
Visiteurs actuels
Nouveaux messages de profil
Rechercher dans les messages des profils
Teams
Créé ton équipe
Quoi de neuf ?
Nouveaux messages
Rechercher un forum
Menu
Connexion
S'inscrire
Install the app
Install
Forums
Forums généraux
Informatique
Développement
Laravel 5 : création d'un portfolio de graphiste (ajout, modification et suppression de création) #2
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
Vous utilisez un navigateur non à jour ou ancien. Il ne peut pas afficher ce site ou d'autres sites correctement.
Vous devez le mettre à jour ou utiliser un
navigateur alternatif
.
Répondre à la discussion
Message
<blockquote data-quote="Rivals" data-source="post: 7061206" data-attributes="member: 694298"><p style="text-align: center"><span style="font-family: 'MyriadPro Light'">[ATTACH=full]105147[/ATTACH]</span></p> <p style="text-align: center"><span style="font-family: 'MyriadPro Light'">Bonjour à tous, on se retrouve aujourd'hui pour </span><span style="font-family: 'MyriadPro'">la création d'un portfolio de graphiste</span><span style="font-family: 'MyriadPro Light'"> grâce au framework PHP nommé </span><span style="font-family: 'MyriadPro'">Laravel</span><span style="font-family: 'MyriadPro Light'">.</span></p> <p style="text-align: center"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="text-align: left"><span style="font-family: 'MyriadPro Light'"><span style="color: #0059b3">[FA]fa-border fa-lightbulb-o[/FA]</span> Je tiens à préciser que ceci est</span><span style="font-family: 'MyriadPro'"><span style="color: #0059b3"> l'épisode 2</span></span><span style="font-family: 'MyriadPro Light'"> de la création de ce portfolio, retrouvez l'épisode 1.</span></p> <p style="text-align: left"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="text-align: left"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="text-align: left"><span style="font-family: 'MyriadPro'">[FA]fa-border fa-star[/FA] OBJECTIF DE L'EPISODE 2</span></p> <p style="text-align: left"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="text-align: left"><span style="font-family: 'MyriadPro Light'">Dans cet épisode 2 nous allons essayer de faire la partie <em>créations</em> dans l'administration c'est à dire la publication d'une création, l'édition et la suppression de celle-ci, cet objectif est dépendant d'un autre : l<em>a création du système de catégories de nos créations</em>.</span></p> <p style="text-align: left"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="text-align: left"><span style="font-family: 'MyriadPro'">[FA]fa-border fa-plus[/FA] PUBLICATION D'UNE CREATION</span></p> <p style="text-align: left"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="text-align: left"><span style="font-family: 'MyriadPro Light'">L'objectif est énoncé, démarrons par la publication c'est à dire </span><span style="font-family: 'MyriadPro'">l'enregistrement d'une nouvelle création</span><span style="font-family: 'MyriadPro Light'"> de la part de notre graphiste.</span></p> <p style="text-align: left"><span style="font-family: 'MyriadPro Light'"></span></p><p><span style="font-family: 'MyriadPro Light'">Dans le controller <em>WorkController</em> nous devons modifier la fonction <em>create()</em> afin que celle-ci</span><span style="font-family: 'MyriadPro'"> affiche notre formulaire pour pouvoir enregistrer une nouvelle création</span><span style="font-family: 'MyriadPro Light'"> comme il était prévu dans <u>l'épisode 1</u> lorsque j'ai donné le tableau des routes / fonctions & URLs correspondantes.</span></p><p style="text-align: left"></p> <ol style="text-align: left"> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Pour se faire nous devons renseigner le code ci-dessous dans notre fonction <em>create()</em>.</span></li> </ol> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[PHP] /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Show the form for creating a new resource.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return \Illuminate\Http\Response</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function create()</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> return view('admin.works.create');</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[/PHP]</span></p> <ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Rendez-vous ensuite sur l'URL suivante : <a href="http://votre-environnement.fr/admin/works/create" target="_blank"><u>http://votre-environnement.fr/admin/works/create</u></a>.</span><br /> <p style="text-align: center"><span style="font-family: 'MyriadPro Light'">[ATTACH=full]105187[/ATTACH]</span></p> </li> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Comme pouvez le voir </span><span style="font-family: 'MyriadPro'">l'erreur nous indique que nous n'avons pas crée la vue</span><span style="font-family: 'MyriadPro Light'">, nous allons donc le faire. Il faut créer un dossier <em>admin</em> et un sous-dossier <em>works</em> ainsi qu'un fichier <em>create.blade.php</em> dans le dossier <em>resources/views [FA]fa-folder[/FA]</em>.</span><br /> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[PHP]@extends('layouts.app')<br /> <br /> @section('content')<br /> <div class="container"><br /> <div class="row"><br /> <div class="col-md-8 col-md-offset-2"><br /> <div class="panel panel-default"><br /> <div class="panel-heading">Ajout d'une création</div><br /> <div class="panel-body"><br /> <form class="form-horizontal" role="form" method="POST" action="{{ route('admin.works.store') }}" enctype="multipart/form-data"><br /> {{ csrf_field() }}<br /> <br /> <div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}"><br /> <label for="name" class="col-md-4 control-label">Nom</label><br /> <br /> <div class="col-md-6"><br /> <input id="name" type="text" class="form-control" name="name" value="{{ old('name') }}" required autofocus><br /> <br /> @if ($errors->has('name'))<br /> <span class="help-block"><br /> <strong>{{ $errors->first('name') }}</strong><br /> </span><br /> @endif<br /> </div><br /> </div><br /> <br /> <div class="form-group{{ $errors->has('slug') ? ' has-error' : '' }}"><br /> <label for="name" class="col-md-4 control-label">Slug</label><br /> <br /> <div class="col-md-6"><br /> <input id="slug" type="text" class="form-control" name="slug" value="{{ old('slug') }}" required autofocus><br /> <br /> @if ($errors->has('slug'))<br /> <span class="help-block"><br /> <strong>{{ $errors->first('slug') }}</strong><br /> </span><br /> @endif<br /> </div><br /> </div><br /> <br /> <div class="form-group{{ $errors->has('description') ? ' has-error' : '' }}"><br /> <label for="description" class="col-md-4 control-label">Description</label><br /> <br /> <div class="col-md-6"><br /> <textarea class="form-control" name="description" id="description">{{ old('description') }}</textarea><br /> <br /> @if ($errors->has('description'))<br /> <span class="help-block"><br /> <strong>{{ $errors->first('description') }}</strong><br /> </span><br /> @endif<br /> </div><br /> </div><br /> <br /> <div class="form-group{{ $errors->has('work') ? ' has-error' : '' }}"><br /> <label for="work" class="col-md-4 control-label">Création</label><br /> <br /> <div class="col-md-6"><br /> <input type="file" class="form-control" id="work" name="work" required><br /> <br /> @if ($errors->has('work'))<br /> <span class="help-block"><br /> <strong>{{ $errors->first('work') }}</strong><br /> </span><br /> @endif<br /> </div><br /> </div><br /> <br /> <!-- A SUPPRIMER APRES LE TEST !--><br /> <input type="hidden" name="categorie_id" value="1"/><br /> <br /> <div class="form-group"><br /> <div class="col-md-8 col-md-offset-4"><br /> <button type="submit" class="btn btn-primary"><br /> Sauvegarder<br /> </button><br /> </div><br /> </div><br /> </form><br /> </div><br /> </div><br /> </div><br /> </div><br /> </div><br /> @endsection<br /> [/PHP]</span></p> <br /> <span style="font-family: 'MyriadPro'">Il peut y avoir des morceaux de code qui peuvent vous sembler inconnus</span><span style="font-family: 'MyriadPro Light'"> comme<em> @extends</em> et <em>[USER=625]@Section[/USER]</em>, je vous invite à jeter un coup d'oeil à la vue se nommant <em>app.blade.php</em> dans le dossier layouts que vous trouverez également dans le dossier <em>resources/views</em> (ça fait beaucoup de dossiers je vous l'accorde).<br /> <br /> Dans ce fichier vous trouvez d'autres balises, une particulière <em>@yield</em>. <br /> <br /> <u>En réalité celles que nous avons vu dans le fichier create.blade.php sont liées à @yield.</u><br /> <br /> <em>@yield</em> permet à d'autres vues, en étendant celle dans laquelle se trouve cette même balise <em>@yield</em>, de </span><span style="font-family: 'MyriadPro'">placer du contenu</span><span style="font-family: 'MyriadPro Light'">. Ainsi le contenu de notre template se trouvant entre les balises <em>[USER=625]@Section[/USER]</em> est placé au même endroit que la balise <em>@yield</em> de notre layout (<em>app.blade.php</em>).<br /> <br /> Ainsi vous pouvez créer efficacement des vues sans pour autant re-ecrire toute une partie de votre code, dans notre cas nous insérons simplement le contenu de notre vue qui va s'implanter sur le reste du code se trouvant dans notre <em>layout</em>.</span></li> </ol><ul> <li data-xf-list-type="ul"><span style="font-family: 'MyriadPro-Light'">Si nous nous rendons de nouveau sur notre environnement <span style="font-family: 'MyriadPro'">vous pourrez voir notre formulaire [FA]fa-wpforms[/FA]</span>.</span></li> </ul><p style="text-align: center"><span style="font-family: 'MyriadPro-Light'">[ATTACH=full]105188[/ATTACH]</span></p> <p style="text-align: center"><span style="font-family: 'MyriadPro Light'">SI vous remplissez ce formulaire et que vous le soumettez vous arriverez sur une page qui est tout simplement notre méthode <em>store()</em>.</span></p> <ul> <li data-xf-list-type="ul"><span style="font-family: 'MyriadPro Light'">Pour ajouter une nouvelle création il faut créer le model </span><em><span style="font-family: 'MyriadPro Light'">Work</span></em><span style="font-family: 'MyriadPro Light'">, pour se faire entrez la commande suivante avec </span><span style="font-family: 'MyriadPro'">Artisan</span><span style="font-family: 'MyriadPro Light'">.</span></li> </ul> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[CODE]php artisan make:model Work[/CODE]</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[ATTACH=full]105201[/ATTACH]</span></p><p><span style="font-family: 'MyriadPro'">Un nouveau fichier</span><span style="font-family: 'MyriadPro Light'"> nommé <em>Work.php</em> est crée il se trouve dans le dossier app, ouvrez le.</span></p><p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[PHP]<?php</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">namespace App;</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">use Illuminate\Database\Eloquent\Model;</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">class Work extends Model</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">{</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> //</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">}</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[/PHP]</span></p><p><span style="font-family: 'MyriadPro Light'">Dans ce model vous devez préciser deux attributs qui sont les suivants : <em>fillable</em> ou <em>guarded</em>.</span></p><p></p><p style="margin-left: 20px"><span style="font-family: 'MyriadPro'">[FA]fa-border fa-gg[/FA] fillable</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">Cet attribut permet de renseigner les champs qui seront modifiables, imaginez cela comme </span><span style="font-family: 'MyriadPro'">une liste blanche</span><span style="font-family: 'MyriadPro Light'">.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro'">[FA]fa-border fa-gg[/FA] guarded</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">Cet attribut est tout simplement le contraire de notre attribut fillable, imaginez cela comme </span><span style="font-family: 'MyriadPro'">une liste noire</span><span style="font-family: 'MyriadPro Light'">.</span></p><p><span style="font-family: 'MyriadPro Light'">Ainsi un champs <em>is_admin</em> devra être renseigné dans l'attribut <em>guarded</em> car cela permettra d'éviter qu'</span><span style="font-family: 'MyriadPro'">un utilisateur malicieux [FA]fa-user-secret[/FA] de passer un paramètre via votre formulaire et de s'enregistrer comme un administrateur</span><span style="font-family: 'MyriadPro Light'">. <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite351" alt=";)" title="Clin d'oeil ;)" loading="lazy" data-shortname=";)" /></span></p><p><span style="font-family: 'MyriadPro Light'"></span></p><p><span style="font-family: 'MyriadPro Light'"><span style="color: #ff8000"><span style="font-family: 'MyriadPro-Light'">[FA]fa-border fa-lightbulb-o[/FA]</span></span> <u> Tous les champs sont sur liste noire par défaut</u>, du coup nous ne renseignons pas certains champs.</span></p><ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Renseignez les attributs suivants comme je le fais dans le model <em>Work</em>.</span><br /> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[PHP]<?php<br /> <br /> namespace App;<br /> <br /> use Illuminate\Database\Eloquent\Model;<br /> <br /> class Work extends Model<br /> {<br /> protected $fillable = ['name', 'slug', 'description', 'categorie_id'];<br /> }<br /> [/PHP]</span></p> </li> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Rendez-vous ensuite dans le controller <em>WorkController</em> et modifions la fonction <em>store()</em>, il faut utiliser notre model ainsi nous allons le déclarer en haut de classe. <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite351" alt=";)" title="Clin d'oeil ;)" loading="lazy" data-shortname=";)" /></span><br /> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[PHP]namespace App\Http\Controllers\Admin;<br /> <br /> use Illuminate\Http\Request;<br /> use App\Http\Controllers\Controller;<br /> <br /> use App\Work;[/PHP]</span></p> </li> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Puis dans la méthode <em>store()</em> </span><span style="font-family: 'MyriadPro'">nous devons stocker les valeurs reçues après validation du formulaire</span><span style="font-family: 'MyriadPro Light'"> et pour cela il existe une fonction magique qui se nomme <em>create()</em> et qui est accessible via notre model.</span><br /> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[PHP] /**<br /> * Store a newly created resource in storage.<br /> *<br /> * @param \Illuminate\Http\Request $request<br /> * @return \Illuminate\Http\Response<br /> */<br /> public function store(Request $request)<br /> {<br /> Work::create($request->all());<br /> <br /> return redirect()->route('admin.works.index');<br /> }[/PHP]</span></p> <span style="font-family: 'MyriadPro Light'">Pour l'instant je souhaite simplement enregistrer <em>le nom</em>, <em>le slug</em> et <em>la description</em> de la création nous verrons comment transférer une image. [FA]fa-picture-o[/FA] </span></li> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Remplissez le formulaire sans la création, veuillez enlever l'attribut <em>required</em> du champs vous permettant de transférer l'image car sinon <u>vous serez embêté pour l'essai</u>. <img src="/data/assets/smilies/joueur.gif" class="smilie" loading="lazy" alt=":p" title="Joueur :p" data-shortname=":p" /></span></li> </ol> <p style="text-align: center"><span style="font-family: 'MyriadPro Light'">[ATTACH=full]105204[/ATTACH]</span></p> <p style="text-align: center"><span style="font-family: 'MyriadPro'"><span style="color: #00b359">Si vous arrivez sur une page blanche vous arrivez réussi à insérer des données dans notre table <em>works</em>. [FA]fa-check-square[/FA]</span></span></p> <p style="text-align: center"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="text-align: center"><span style="font-family: 'MyriadPro Light'">[ATTACH=full]105205[/ATTACH]</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro'">[FA]fa-border fa-upload[/FA] TRANSFERT D'UNE IMAGE</span></p> <ol style="margin-left: 20px"> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Maintenant nous allons implanter le code permettant de transférer un fichier, en l'occurence</span><span style="font-family: 'MyriadPro'"> une image dans notre action <em>store()</em></span><span style="font-family: 'MyriadPro Light'">.</span></li> </ol> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[PHP] /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Store a newly created resource in storage.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @param \Illuminate\Http\Request $request</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return \Illuminate\Http\Response</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function store(Request $request)</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> $work = Work::create($request->all());</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> $request->file('work')->storeAs('works', $work->id.'.png');</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> return redirect()->route('admin.works.index');</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[/PHP]</span></p></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">Concrètement nous devons d'implanter cette fonctionnalité, <u>tout d'abord on stock dans une variable notre nouvelle création</u> pour pouvoir renseigner <u>son identifiant en tant que nom de l'image</u> que nous renseignons.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">Le nom du champs est <em>work </em>d'où la valeur dans la méthode <em>file()</em>, puis nous allons stocker celle-ci dans un sous-dossier <em>works</em> qui se trouve dans le dossier <em>storage</em> à la racine de votre site.</span></p> <p style="margin-left: 20px"> <ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Maintenant </span><span style="font-family: 'MyriadPro'">essayons d'ajouter une création en renseignant une image</span><span style="font-family: 'MyriadPro Light'">, n'oubliez pas de remettre l'attribut <em>required </em>HTML que vous avez retiré précédemment.</span></li> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Si vous arrivez une nouvelle fois sur une page blanche c'est que tout est bon, vérifiez qu'il y a bien votre image de transférée dans le dossier <em>storage/app/works</em>.</span></li> </ol> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[ATTACH=full]105206[/ATTACH]</span></p></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro'">[FA]fa-border fa-gavel[/FA] VALIDATION</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">Nous savons comment enregistrer des données et comment transférer une image c'est très bien mais </span><span style="font-family: 'MyriadPro'">malheureusement ce n'est pas sécurisé</span><span style="font-family: 'MyriadPro Light'"> car nous ne vérifions jamais si le contenu est existant, si le fichier est une image.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"><u>C'est pour cela que nous allons créer un fichier de validation de requêtes propre à nos créations.</u></span></p> <p style="margin-left: 20px"> <ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Entrez la commande suivante avec </span><span style="font-family: 'MyriadPro'">Artisan</span><span style="font-family: 'MyriadPro Light'">.</span></li> </ol> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[CODE]php artisan make:request WorkRequest[/CODE]</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[ATTACH=full]105208[/ATTACH]</span></p></p> <p style="margin-left: 20px"> <ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Ouvrez le fichier généré qui se trouve dans le dossier <em>app/Http/Request</em>s, tout de suite nous allons modifier le code de façon à qu'</span><span style="font-family: 'MyriadPro'">un utilisateur puisse utiliser nos règles de validation</span><span style="font-family: 'MyriadPro Light'">. Pour se faire il faut modifier le retour de la fonction <em>authorize()</em>.</span></li> </ol> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[PHP]<?php</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">namespace App\Http\Requests;</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">use Illuminate\Foundation\Http\FormRequest;</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">class WorkRequest extends FormRequest</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">{</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Determine if the user is authorized to make this request.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return bool</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function authorize()</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> return true;</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Get the validation rules that apply to the request.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return array</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function rules()</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> return [</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> //</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> ];</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">}</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[/PHP]</span></p> </p><p><span style="font-family: 'MyriadPro'">Les règles de validation se renseignent dans un tableau</span><span style="font-family: 'MyriadPro Light'">, la clé correspond à votre champs et la valeur correspond à une suite de règles que je vous invite à lire dans la documentation.</span></p><p><span style="font-family: 'MyriadPro Light'"></span></p><p><span style="font-family: 'MyriadPro Light'"><span style="color: #0059b3">[fa]fa-border fa-link[/fa] </span><a href="https://laravel.com/docs/5.3/validation#available-validation-rules" target="_blank">https://laravel.com/docs/5.3/validation#available-validation-rules</a></span></p><p style="margin-left: 20px"> <ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Ajoutez les clés et valeurs que </span><span style="font-family: 'MyriadPro'">j'ai moi même mise dans le tableau</span><span style="font-family: 'MyriadPro Light'">.</span></li> </ol> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[PHP]<?php</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">namespace App\Http\Requests;</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">use Illuminate\Foundation\Http\FormRequest;</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">class WorkRequest extends FormRequest</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">{</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Determine if the user is authorized to make this request.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return bool</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function authorize()</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> return true;</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Get the validation rules that apply to the request.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return array</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function rules()</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> return [</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> 'name' => 'required|min:2|max:255',</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> 'slug' => 'required|min:2|max:255|regex:/^[a-z0-9]+(?:-[a-z0-9]+)*$/',</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> 'description' => 'required|min:2',</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> //'categorie_id => 'exists:work_categories,id'</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> 'work' => 'required|mimes:png'</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> ];</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">}</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[/PHP]</span></p></p> <p style="margin-left: 20px"> <ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Enfin, il faut déclarer à Laravel que nous utilisons ces règles de validation, pour se faire nous allons modifier le paramètre de notre fonction <em>store()</em>. <u>N'oubliez pas de supprimer l'utilisation de la classe <em>Request </em>(<em>use Illuminate\Http\Request;</em>) et d'ajouter notre classe <em>WorkRequest</em> (<em><span style="font-size: 15px">use App\Http\Requests\WorkRequest;</span></em>)</u></span></li> </ol> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[PHP]<?php</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">namespace App\Http\Controllers\Admin;</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">use App\Http\Requests\WorkRequest;</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">use App\Http\Controllers\Controller;</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">use App\Work;</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">class WorkController extends Controller</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">{</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Display a listing of the resource.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return \Illuminate\Http\Response</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function index()</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> //</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Show the form for creating a new resource.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return \Illuminate\Http\Response</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function create()</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> return view('admin.works.create');</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Store a newly created resource in storage.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @param \Illuminate\Http\Request $request</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return \Illuminate\Http\Response</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function store(WorkRequest $request)</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> $work = Work::create($request->all());</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> $request->file('work')->storeAs('works', $work->id.'.png');</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> return redirect()->route('admin.works.index');</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Display the specified resource.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @param int $id</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return \Illuminate\Http\Response</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function show($id)</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> //</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Show the form for editing the specified resource.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @param int $id</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return \Illuminate\Http\Response</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function edit($id)</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> //</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Update the specified resource in storage.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @param \Illuminate\Http\Request $request</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @param int $id</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return \Illuminate\Http\Response</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function update(Request $request, $id)</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> //</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Remove the specified resource from storage.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @param int $id</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return \Illuminate\Http\Response</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function destroy($id)</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> //</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">}</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[/PHP]</span></p></p> <p style="margin-left: 20px"> <ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Si vous tentez maintenant de soumettre le formulaire en commentant des erreurs </span><span style="font-family: 'MyriadPro'">vous aurez un message d'erreur pour chaque cas spécifié par nos règles</span><span style="font-family: 'MyriadPro Light'">.</span></li> </ol> <p style="text-align: center"><span style="font-family: 'MyriadPro Light'">[ATTACH=full]105209[/ATTACH]</span></p> <p style="margin-left: 20px"><p style="margin-left: 20px"><span style="font-family: 'MyriadPro'">[FA]fa-border fa-check-circle[/FA] AFFICHER UN MESSAGE DE SUCCES</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">Bon, c'est très bien de pouvoir afficher des messages d'erreur mais </span><span style="font-family: 'MyriadPro'">nous voulons aussi afficher des messages de succès</span><span style="font-family: 'MyriadPro Light'"> pour cela nous devons modifier la fonction<em> store()</em> de notre controller mais également nos vues.</span></p> <ol style="margin-left: 20px"> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Modifiez dans un premier temps la réponse de la fonction<em> store()</em> pour utiliser des messages <em>flash</em>, c'est à dire <u>des messages stockés par le biais de la session</u>.</span></li> </ol> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[PHP] /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Store a newly created resource in storage.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @param \Illuminate\Http\Request $request</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return \Illuminate\Http\Response</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function store(WorkRequest $request)</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> $work = Work::create($request->all());</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> $request->file('work')->storeAs('works', $work->id.'.png');</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> return redirect()->route('admin.works.index')->with('success', 'Création publiée avc succès.');</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }[/PHP]</span></p></p> <p style="margin-left: 20px"> <ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Modifiez maintenant la fonction<em> index()</em> </span><span style="font-family: 'MyriadPro'">pour afficher une vue</span><span style="font-family: 'MyriadPro Light'"> que vous allez créer juste après.</span></li> </ol> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[PHP] /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Display a listing of the resource.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return \Illuminate\Http\Response</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function index()</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> return view('admin.works.index');</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }[/PHP]</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[HTML]@extends('layouts.app')</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">@section('content')</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="container"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="row"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="col-md-8 col-md-offset-2"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> @if (session('success'))</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="alert alert-success"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {{ session('success') }}</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> @endif</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">@endsection</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[/HTML]</span></p></p> <p style="margin-left: 20px"> <ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Si nous ajoutons une création </span><span style="font-family: 'MyriadPro'">vous pourrez voir le message de succès</span><span style="font-family: 'MyriadPro Light'">.</span></li> </ol> <p style="text-align: center"><span style="font-family: 'MyriadPro Light'">[ATTACH=full]105211[/ATTACH]</span></p> </p><p></p><p><span style="font-family: 'MyriadPro'">[FA]fa-border fa-edit[/FA] MODIFICATION D'UNE CREATION</span></p><p><span style="font-family: 'MyriadPro Light'"></span></p><p><span style="font-family: 'MyriadPro Light'">Maintenant que nous avons réalisé la fonctionnalité de publication de création, </span><span style="font-family: 'MyriadPro'">nous devons pouvoir les modifier quand nous le voulons</span><span style="font-family: 'MyriadPro Light'">, personnellement je vais retirer le <em>routing</em> concernant la fonction <em>show</em> car je ne la trouve pas utile dans notre cas, ainsi pour pouvoir modifier une création le graphiste aura une icône lui permettant d'accéder à sa partie administration, mais cette fois ci depuis la partie publique si je peux dire.</span></p><ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Pour exclure le <em>routing </em>concernant la fonction <em>show</em> il suffit d'utiliser une fonction disponible depuis notre fichier <em>web.php</em>, qui gère nos routes.</span></li> </ol> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[PHP]<?php</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">/*</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">|--------------------------------------------------------------------------</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">| Web Routes</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">|--------------------------------------------------------------------------</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">|</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">| Here is where you can register web routes for your application. These</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">| routes are loaded by the RouteServiceProvider within a group which</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">| contains the "web" middleware group. Now create something great!</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">|</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">*/</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">Route::get('/', function () {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> return view('welcome');</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">});</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'as' => 'admin.', 'middleware' => 'auth'], function () {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> // ici nous allons renseigner les URL correspondant à des controllers et actions précises.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> Route::resource('works', 'WorkController', ['except' => ['show']]);</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">});</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">//Auth::routes();</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">Route::group(['namespace' => 'Auth'], function () {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> Route::get('/login', 'LoginController@showLoginForm')->name('login');</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> Route::post('/login', 'LoginController@login');</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> Route::post('/logout', 'LoginController@logout')->name('logout');</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">});</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">Route::get('/home', 'HomeController@index');</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[/PHP]</span></p> <ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Modifier la fonction edit() pour retourner une vue nommée tout simplement <em>edit</em>.</span></li> </ol> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[PHP] /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Show the form for editing the specified resource.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @param int $id</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return \Illuminate\Http\Response</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function edit($id)</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> return view('admin.works.edit');</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }[/PHP]</span></p><p><span style="font-family: 'MyriadPro Light'">Il manque plus qu'à passer notre création à notre vue, mais avant cela il faudrait vérifier si elle existe et donc effectuer une requête via notre model <em>Work</em>.</span></p><ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Mais il existe une façon <u>encore plus simple de vérifier cela</u>, c'est en passant directement en paramètre </span><span style="font-family: 'MyriadPro'">un objet de notre model</span><span style="font-family: 'MyriadPro Light'">.</span></li> </ol> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[PHP] /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Show the form for editing the specified resource.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @param int $id</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return \Illuminate\Http\Response</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function edit(Work $work)</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> return view('admin.works.edit');</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }[/PHP]</span></p> <ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Je vous invite maintenant à essayer d'accéder à des URLs de ce type : <em><a href="http://mon-environnement.fr/admin/works/1/edit" target="_blank">http://mon-environnement.fr/admin/works/1/edit</a></em> et vous aurez une erreur vous indiquant que la vue demandée n'existe pas. Essayez par la suite un identifiant de création qui n'existe pas par exemple <em>393939</em>.</span></li> </ol> <p style="text-align: center"><span style="font-family: 'MyriadPro Light'">[ATTACH=full]105213[/ATTACH]</span></p> <ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Comme vous pouvez le voir </span><span style="font-family: 'MyriadPro'">une erreur nous est indiquée</span><span style="font-family: 'MyriadPro Light'">, nous verrons plus tard comment modifier cela.</span></li> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Créez ensuite votre vue <em>edit </em>qui est sensiblement la même que celle de création.</span></li> </ol> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[HTML]@extends('layouts.app')</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">@section('content')</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="container"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="row"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="col-md-8 col-md-offset-2"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="panel panel-default"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="panel-heading">Modification d'une création : {{ $work->name }}</div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="panel-body"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <form class="form-horizontal" role="form" method="POST" action="{{ route('admin.works.update', $work->id) }}"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {{ csrf_field() }}</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {{ method_field('PATCH') }}</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <label for="name" class="col-md-4 control-label">Nom</label></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="col-md-6"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <input id="name" type="text" class="form-control" name="name" value="{{ $work->name }}" required autofocus></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> @if ($errors->has('name'))</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <span class="help-block"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <strong>{{ $errors->first('name') }}</strong></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </span></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> @endif</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="form-group{{ $errors->has('slug') ? ' has-error' : '' }}"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <label for="name" class="col-md-4 control-label">Slug</label></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="col-md-6"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <input id="slug" type="text" class="form-control" name="slug" value="{{ $work->slug }}" required autofocus></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> @if ($errors->has('slug'))</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <span class="help-block"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <strong>{{ $errors->first('slug') }}</strong></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </span></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> @endif</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="form-group{{ $errors->has('description') ? ' has-error' : '' }}"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <label for="description" class="col-md-4 control-label">Description</label></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="col-md-6"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <textarea class="form-control" name="description" id="description">{{ $work->description }}</textarea></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> @if ($errors->has('description'))</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <span class="help-block"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <strong>{{ $errors->first('description') }}</strong></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </span></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> @endif</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <!-- A SUPPRIMER APRES LE TEST !--></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <input type="hidden" name="categorie_id" value="1"/></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="form-group"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="col-md-8 col-md-offset-4"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <button type="submit" class="btn btn-primary"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> Sauvegarder</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </button></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </form></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">@endsection</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[/HTML]</span></p> <ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Comme vous pouvez le voir en vous rendant sur la page d'édition,<u> j'ai volontairement supprimé le champs permettant de transférer un fichier</u>, ainsi il faut modifier nos règles de validation et traiter en fonction de </span><span style="font-family: 'MyriadPro'">la méthode HTTP [FA]fa-server[/FA]</span><span style="font-family: 'MyriadPro Light'"> envoyée.</span></li> </ol> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[PHP]<?php</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">namespace App\Http\Requests;</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">use Illuminate\Foundation\Http\FormRequest;</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">class WorkRequest extends FormRequest</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">{</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Determine if the user is authorized to make this request.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return bool</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function authorize()</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> return true;</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Get the validation rules that apply to the request.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return array</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function rules()</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> switch($this->method())</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> case 'GET':</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> case 'DELETE':</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> return [];</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> case 'POST':</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> return [</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> 'name' => 'required|min:2|max:255',</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> 'slug' => 'required|min:2|max:255|regex:/^[a-z0-9]+(?:-[a-z0-9]+)*$/',</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> 'description' => 'required|min:2',</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> //'categorie_id => 'exists:work_categories,id'</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> 'work' => 'required|mimes:png'</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> ];</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> case 'PUT':</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> case 'PATCH':</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> return [</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> 'name' => 'required|min:2|max:255',</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> 'slug' => 'required|min:2|max:255|regex:/^[a-z0-9]+(?:-[a-z0-9]+)*$/',</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> 'description' => 'required|min:2',</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> //'categorie_id => 'exists:work_categories,id'</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> 'work' => 'mimes:png'</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> ];</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> default:break;</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">}</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[/PHP]</span></p> <ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Maintenant que nous modifié notre fichier de validation de requêtes, il faut modifier notre fonction <em>update()</em> qui va prendre en paramètre ce même fichier, de la même façon que la fonction <em>store()</em>.</span></li> </ol> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[PHP] /**</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Update the specified resource in storage.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @param \Illuminate\Http\Request $request</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @param int $id</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return \Illuminate\Http\Response</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function update(WorkRequest $request, Work $work)</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> $work->update($request->all());</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> return back();</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[/PHP]</span></p> <ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Tentez de soumettre le formulaire et </span><span style="font-family: 'MyriadPro'">tout fonctionne dans l'ordre</span><span style="font-family: 'MyriadPro Light'">.</span></li> </ol><p><span style="font-family: 'MyriadPro'">[FA]fa-border fa-trash[/FA] SUPPRESSION D'UNE CREATION</span></p><p><span style="font-family: 'MyriadPro Light'"></span></p><p><span style="font-family: 'MyriadPro Light'">Pour terminer cet épisode nous allons ajouter la fonctionnalité de suppression, visuellement se sera très simple : nous ajouterons un bouton "<em>Supprimer</em>" sur la page d'édition qui va soumettre en réalité un formulaire caché, tout ceci avec un peu de JavaScript. <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite355" alt=":)" title=":) :)" loading="lazy" data-shortname=":)" /></span></p><ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Rendez-vous dans le controller <em>WorkController</em> comme d'habitude, à la fonction <em>destroy() </em>vous allez la modifier pour ajouter l'objet de notre modèle <em>Work</em>.<br /> [PHP] /**<br /> * Remove the specified resource from storage.<br /> *<br /> * @param int $id<br /> * @return \Illuminate\Http\Response<br /> */<br /> public function destroy(Work $work)<br /> {<br /> //<br /> }[/PHP]</span></li> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Enfin, </span><span style="font-family: 'MyriadPro'">ajoutons la fonction de suppression </span><span style="font-family: 'MyriadPro Light'">qui est accessible depuis l'objet de notre modèle.</span></li> </ol> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[PHP] /**[/INDENT]</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * Remove the specified resource from storage.</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> *</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @param int $id</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> * @return \Illuminate\Http\Response</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> */</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> public function destroy(Work $work)</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> $work->delete();</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> return redirect()->route('admin.works.index')->with('success', 'Création supprimée avec succès.');</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> }[/PHP]</span></p> <ol> <li data-xf-list-type="ol"><span style="font-family: 'MyriadPro Light'">Et pour terminer, modifiez notre vue <em>edit.</em></span></li> </ol> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[HTML]@extends('layouts.app')</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">@section('content')</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="container"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="row"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="col-md-8 col-md-offset-2"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="panel panel-default"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="panel-heading">Modification d'une création : {{ $work->name }}</div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="panel-body"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <form class="form-horizontal" role="form" method="POST" action="{{ route('admin.works.update', $work->id) }}"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {{ csrf_field() }}</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {{ method_field('PATCH') }}</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <label for="name" class="col-md-4 control-label">Nom</label></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="col-md-6"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <input id="name" type="text" class="form-control" name="name" value="{{ $work->name }}" required autofocus></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> @if ($errors->has('name'))</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <span class="help-block"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <strong>{{ $errors->first('name') }}</strong></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </span></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> @endif</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="form-group{{ $errors->has('slug') ? ' has-error' : '' }}"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <label for="name" class="col-md-4 control-label">Slug</label></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="col-md-6"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <input id="slug" type="text" class="form-control" name="slug" value="{{ $work->slug }}" required autofocus></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> @if ($errors->has('slug'))</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <span class="help-block"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <strong>{{ $errors->first('slug') }}</strong></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </span></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> @endif</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="form-group{{ $errors->has('description') ? ' has-error' : '' }}"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <label for="description" class="col-md-4 control-label">Description</label></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="col-md-6"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <textarea class="form-control" name="description" id="description">{{ $work->description }}</textarea></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> @if ($errors->has('description'))</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <span class="help-block"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <strong>{{ $errors->first('description') }}</strong></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </span></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> @endif</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <!-- A SUPPRIMER APRES LE TEST !--></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <input type="hidden" name="categorie_id" value="1"/></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="form-group"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <div class="col-md-8 col-md-offset-4"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <button type="submit" class="btn btn-primary"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> Sauvegarder</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </button></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <button type="submit" class="btn btn-danger" onclick="event.preventDefault(); document.getElementById('delete-form').submit();"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> Supprimer</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </button></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </form></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> <form id="delete-form" action="{{ route('admin.works.destroy', $work->id) }}" method="POST" style="display: none;"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {{ csrf_field() }}</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> {{ method_field('DELETE') }}</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </form></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'"> </div></span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">@endsection</span></p> <p style="margin-left: 20px"><span style="font-family: 'MyriadPro Light'">[/HTML]</span></p> <p style="text-align: center"><span style="font-family: 'MyriadPro-Light'">[ATTACH=full]105214[/ATTACH] [ATTACH=full]105215[/ATTACH] </span></p><p><span style="font-family: 'MyriadPro Light'"></span></p><p><span style="font-family: 'MyriadPro Light'">C'est tout pour ce deuxième épisode, on se trouve pour </span><span style="font-family: 'MyriadPro'">le 3ème</span><span style="font-family: 'MyriadPro Light'"> dans lequel nous ferons la parte catégories des créations ainsi que la partie contact.</span></p><p style="text-align: center"></p><p><span style="font-family: 'MyriadPro Light'">Amicalement,</span></p><p><span style="font-family: 'MyriadPro Light'">[FA]fa-user[/FA] Rivals</span></p></blockquote><p></p>
[QUOTE="Rivals, post: 7061206, member: 694298"] [CENTER][FONT=MyriadPro Light][ATTACH=full]105147[/ATTACH] Bonjour à tous, on se retrouve aujourd'hui pour [/FONT][FONT=MyriadPro]la création d'un portfolio de graphiste[/FONT][FONT=MyriadPro Light] grâce au framework PHP nommé [/FONT][FONT=MyriadPro]Laravel[/FONT][FONT=MyriadPro Light]. [/FONT][/CENTER] [LEFT][FONT=MyriadPro Light][COLOR=#0059b3][FA]fa-border fa-lightbulb-o[/FA][/COLOR] Je tiens à préciser que ceci est[/FONT][FONT=MyriadPro][COLOR=#0059b3] l'épisode 2[/COLOR][/FONT][FONT=MyriadPro Light] de la création de ce portfolio, retrouvez l'épisode 1. [/FONT] [FONT=MyriadPro][FA]fa-border fa-star[/FA] OBJECTIF DE L'EPISODE 2[/FONT] [FONT=MyriadPro Light] Dans cet épisode 2 nous allons essayer de faire la partie [I]créations[/I] dans l'administration c'est à dire la publication d'une création, l'édition et la suppression de celle-ci, cet objectif est dépendant d'un autre : l[I]a création du système de catégories de nos créations[/I]. [/FONT] [FONT=MyriadPro][FA]fa-border fa-plus[/FA] PUBLICATION D'UNE CREATION[/FONT] [FONT=MyriadPro Light] L'objectif est énoncé, démarrons par la publication c'est à dire [/FONT][FONT=MyriadPro]l'enregistrement d'une nouvelle création[/FONT][FONT=MyriadPro Light] de la part de notre graphiste. [/FONT][/LEFT] [FONT=MyriadPro Light]Dans le controller [I]WorkController[/I] nous devons modifier la fonction [I]create()[/I] afin que celle-ci[/FONT][FONT=MyriadPro] affiche notre formulaire pour pouvoir enregistrer une nouvelle création[/FONT][FONT=MyriadPro Light] comme il était prévu dans [U]l'épisode 1[/U] lorsque j'ai donné le tableau des routes / fonctions & URLs correspondantes.[/FONT] [LEFT] [LIST=1] [*][FONT=MyriadPro Light]Pour se faire nous devons renseigner le code ci-dessous dans notre fonction [I]create()[/I].[/FONT] [/LIST][/LEFT] [INDENT][FONT=MyriadPro Light][PHP] /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { return view('admin.works.create'); } [/PHP][/FONT][/INDENT] [LIST=1] [*][FONT=MyriadPro Light]Rendez-vous ensuite sur l'URL suivante : [URL='http://votre-environnement.fr/admin/works/create'][U]http://votre-environnement.fr/admin/works/create[/U][/URL].[/FONT] [CENTER][FONT=MyriadPro Light][ATTACH=full]105187[/ATTACH][/FONT][/CENTER] [*][FONT=MyriadPro Light]Comme pouvez le voir [/FONT][FONT=MyriadPro]l'erreur nous indique que nous n'avons pas crée la vue[/FONT][FONT=MyriadPro Light], nous allons donc le faire. Il faut créer un dossier [I]admin[/I] et un sous-dossier [I]works[/I] ainsi qu'un fichier [I]create.blade.php[/I] dans le dossier [I]resources/views [FA]fa-folder[/FA][/I].[/FONT] [INDENT][FONT=MyriadPro Light][PHP]@extends('layouts.app') @section('content') <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <div class="panel panel-default"> <div class="panel-heading">Ajout d'une création</div> <div class="panel-body"> <form class="form-horizontal" role="form" method="POST" action="{{ route('admin.works.store') }}" enctype="multipart/form-data"> {{ csrf_field() }} <div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}"> <label for="name" class="col-md-4 control-label">Nom</label> <div class="col-md-6"> <input id="name" type="text" class="form-control" name="name" value="{{ old('name') }}" required autofocus> @if ($errors->has('name')) <span class="help-block"> <strong>{{ $errors->first('name') }}</strong> </span> @endif </div> </div> <div class="form-group{{ $errors->has('slug') ? ' has-error' : '' }}"> <label for="name" class="col-md-4 control-label">Slug</label> <div class="col-md-6"> <input id="slug" type="text" class="form-control" name="slug" value="{{ old('slug') }}" required autofocus> @if ($errors->has('slug')) <span class="help-block"> <strong>{{ $errors->first('slug') }}</strong> </span> @endif </div> </div> <div class="form-group{{ $errors->has('description') ? ' has-error' : '' }}"> <label for="description" class="col-md-4 control-label">Description</label> <div class="col-md-6"> <textarea class="form-control" name="description" id="description">{{ old('description') }}</textarea> @if ($errors->has('description')) <span class="help-block"> <strong>{{ $errors->first('description') }}</strong> </span> @endif </div> </div> <div class="form-group{{ $errors->has('work') ? ' has-error' : '' }}"> <label for="work" class="col-md-4 control-label">Création</label> <div class="col-md-6"> <input type="file" class="form-control" id="work" name="work" required> @if ($errors->has('work')) <span class="help-block"> <strong>{{ $errors->first('work') }}</strong> </span> @endif </div> </div> <!-- A SUPPRIMER APRES LE TEST !--> <input type="hidden" name="categorie_id" value="1"/> <div class="form-group"> <div class="col-md-8 col-md-offset-4"> <button type="submit" class="btn btn-primary"> Sauvegarder </button> </div> </div> </form> </div> </div> </div> </div> </div> @endsection [/PHP][/FONT][/INDENT] [FONT=MyriadPro]Il peut y avoir des morceaux de code qui peuvent vous sembler inconnus[/FONT][FONT=MyriadPro Light] comme[I] @extends[/I] et [I][USER=625]@Section[/USER][/I], je vous invite à jeter un coup d'oeil à la vue se nommant [I]app.blade.php[/I] dans le dossier layouts que vous trouverez également dans le dossier [I]resources/views[/I] (ça fait beaucoup de dossiers je vous l'accorde). Dans ce fichier vous trouvez d'autres balises, une particulière [I]@yield[/I]. [U]En réalité celles que nous avons vu dans le fichier create.blade.php sont liées à @yield.[/U] [I]@yield[/I] permet à d'autres vues, en étendant celle dans laquelle se trouve cette même balise [I]@yield[/I], de [/FONT][FONT=MyriadPro]placer du contenu[/FONT][FONT=MyriadPro Light]. Ainsi le contenu de notre template se trouvant entre les balises [I][USER=625]@Section[/USER][/I] est placé au même endroit que la balise [I]@yield[/I] de notre layout ([I]app.blade.php[/I]). Ainsi vous pouvez créer efficacement des vues sans pour autant re-ecrire toute une partie de votre code, dans notre cas nous insérons simplement le contenu de notre vue qui va s'implanter sur le reste du code se trouvant dans notre [I]layout[/I].[/FONT] [/LIST] [FONT=MyriadPro-Light][LIST] [*]Si nous nous rendons de nouveau sur notre environnement [FONT=MyriadPro]vous pourrez voir notre formulaire [FA]fa-wpforms[/FA][/FONT]. [/LIST][/FONT] [CENTER][FONT=MyriadPro-Light][ATTACH=full]105188[/ATTACH][/FONT] [FONT=MyriadPro Light]SI vous remplissez ce formulaire et que vous le soumettez vous arriverez sur une page qui est tout simplement notre méthode [I]store()[/I].[/FONT][/CENTER] [LIST] [*][FONT=MyriadPro Light]Pour ajouter une nouvelle création il faut créer le model [/FONT][I][FONT=MyriadPro Light]Work[/FONT][/I][FONT=MyriadPro Light], pour se faire entrez la commande suivante avec [/FONT][FONT=MyriadPro]Artisan[/FONT][FONT=MyriadPro Light].[/FONT] [/LIST] [INDENT][FONT=MyriadPro Light][CODE]php artisan make:model Work[/CODE] [ATTACH=full]105201[/ATTACH][/FONT][/INDENT] [FONT=MyriadPro]Un nouveau fichier[/FONT][FONT=MyriadPro Light] nommé [I]Work.php[/I] est crée il se trouve dans le dossier app, ouvrez le.[/FONT] [INDENT][FONT=MyriadPro Light][PHP]<?php namespace App; use Illuminate\Database\Eloquent\Model; class Work extends Model { // } [/PHP][/FONT][/INDENT] [FONT=MyriadPro Light]Dans ce model vous devez préciser deux attributs qui sont les suivants : [I]fillable[/I] ou [I]guarded[/I].[/FONT] [INDENT][FONT=MyriadPro][FA]fa-border fa-gg[/FA] fillable[/FONT] [FONT=MyriadPro Light] Cet attribut permet de renseigner les champs qui seront modifiables, imaginez cela comme [/FONT][FONT=MyriadPro]une liste blanche[/FONT][FONT=MyriadPro Light].[/FONT] [FONT=MyriadPro] [FA]fa-border fa-gg[/FA] guarded[/FONT] [FONT=MyriadPro Light] Cet attribut est tout simplement le contraire de notre attribut fillable, imaginez cela comme [/FONT][FONT=MyriadPro]une liste noire[/FONT][FONT=MyriadPro Light].[/FONT][/INDENT] [FONT=MyriadPro Light]Ainsi un champs [I]is_admin[/I] devra être renseigné dans l'attribut [I]guarded[/I] car cela permettra d'éviter qu'[/FONT][FONT=MyriadPro]un utilisateur malicieux [FA]fa-user-secret[/FA] de passer un paramètre via votre formulaire et de s'enregistrer comme un administrateur[/FONT][FONT=MyriadPro Light]. ;) [COLOR=#ff8000][FONT=MyriadPro-Light][FA]fa-border fa-lightbulb-o[/FA][/FONT][/COLOR] [U] Tous les champs sont sur liste noire par défaut[/U], du coup nous ne renseignons pas certains champs.[/FONT] [LIST=1] [*][FONT=MyriadPro Light]Renseignez les attributs suivants comme je le fais dans le model [I]Work[/I].[/FONT] [INDENT][FONT=MyriadPro Light][PHP]<?php namespace App; use Illuminate\Database\Eloquent\Model; class Work extends Model { protected $fillable = ['name', 'slug', 'description', 'categorie_id']; } [/PHP][/FONT][/INDENT] [*][FONT=MyriadPro Light]Rendez-vous ensuite dans le controller [I]WorkController[/I] et modifions la fonction [I]store()[/I], il faut utiliser notre model ainsi nous allons le déclarer en haut de classe. ;)[/FONT] [INDENT][FONT=MyriadPro Light][PHP]namespace App\Http\Controllers\Admin; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\Work;[/PHP][/FONT][/INDENT] [*][FONT=MyriadPro Light]Puis dans la méthode [I]store()[/I] [/FONT][FONT=MyriadPro]nous devons stocker les valeurs reçues après validation du formulaire[/FONT][FONT=MyriadPro Light] et pour cela il existe une fonction magique qui se nomme [I]create()[/I] et qui est accessible via notre model.[/FONT] [INDENT][FONT=MyriadPro Light][PHP] /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { Work::create($request->all()); return redirect()->route('admin.works.index'); }[/PHP][/FONT][/INDENT] [FONT=MyriadPro Light]Pour l'instant je souhaite simplement enregistrer [I]le nom[/I], [I]le slug[/I] et [I]la description[/I] de la création nous verrons comment transférer une image. [FA]fa-picture-o[/FA] [/FONT] [*][FONT=MyriadPro Light]Remplissez le formulaire sans la création, veuillez enlever l'attribut [I]required[/I] du champs vous permettant de transférer l'image car sinon [U]vous serez embêté pour l'essai[/U]. :p[/FONT] [/LIST] [CENTER][FONT=MyriadPro Light][ATTACH=full]105204[/ATTACH][/FONT] [FONT=MyriadPro][COLOR=#00b359]Si vous arrivez sur une page blanche vous arrivez réussi à insérer des données dans notre table [I]works[/I]. [FA]fa-check-square[/FA][/COLOR][/FONT] [FONT=MyriadPro Light] [ATTACH=full]105205[/ATTACH][/FONT][/CENTER] [INDENT][FONT=MyriadPro][FA]fa-border fa-upload[/FA] TRANSFERT D'UNE IMAGE[/FONT] [LIST=1] [*][FONT=MyriadPro Light]Maintenant nous allons implanter le code permettant de transférer un fichier, en l'occurence[/FONT][FONT=MyriadPro] une image dans notre action [I]store()[/I][/FONT][FONT=MyriadPro Light].[/FONT] [/LIST] [INDENT][FONT=MyriadPro Light][PHP] /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $work = Work::create($request->all()); $request->file('work')->storeAs('works', $work->id.'.png'); return redirect()->route('admin.works.index'); } [/PHP][/FONT][/INDENT] [FONT=MyriadPro Light]Concrètement nous devons d'implanter cette fonctionnalité, [U]tout d'abord on stock dans une variable notre nouvelle création[/U] pour pouvoir renseigner [U]son identifiant en tant que nom de l'image[/U] que nous renseignons. Le nom du champs est [I]work [/I]d'où la valeur dans la méthode [I]file()[/I], puis nous allons stocker celle-ci dans un sous-dossier [I]works[/I] qui se trouve dans le dossier [I]storage[/I] à la racine de votre site.[/FONT] [LIST=1] [*][FONT=MyriadPro Light]Maintenant [/FONT][FONT=MyriadPro]essayons d'ajouter une création en renseignant une image[/FONT][FONT=MyriadPro Light], n'oubliez pas de remettre l'attribut [I]required [/I]HTML que vous avez retiré précédemment.[/FONT] [*][FONT=MyriadPro Light]Si vous arrivez une nouvelle fois sur une page blanche c'est que tout est bon, vérifiez qu'il y a bien votre image de transférée dans le dossier [I]storage/app/works[/I].[/FONT] [/LIST] [INDENT][FONT=MyriadPro Light][ATTACH=full]105206[/ATTACH][/FONT][/INDENT] [FONT=MyriadPro][FA]fa-border fa-gavel[/FA] VALIDATION[/FONT] [FONT=MyriadPro Light] Nous savons comment enregistrer des données et comment transférer une image c'est très bien mais [/FONT][FONT=MyriadPro]malheureusement ce n'est pas sécurisé[/FONT][FONT=MyriadPro Light] car nous ne vérifions jamais si le contenu est existant, si le fichier est une image. [U]C'est pour cela que nous allons créer un fichier de validation de requêtes propre à nos créations.[/U][/FONT] [LIST=1] [*][FONT=MyriadPro Light]Entrez la commande suivante avec [/FONT][FONT=MyriadPro]Artisan[/FONT][FONT=MyriadPro Light].[/FONT] [/LIST] [INDENT][FONT=MyriadPro Light][CODE]php artisan make:request WorkRequest[/CODE] [ATTACH=full]105208[/ATTACH][/FONT][/INDENT] [LIST=1] [*][FONT=MyriadPro Light]Ouvrez le fichier généré qui se trouve dans le dossier [I]app/Http/Request[/I]s, tout de suite nous allons modifier le code de façon à qu'[/FONT][FONT=MyriadPro]un utilisateur puisse utiliser nos règles de validation[/FONT][FONT=MyriadPro Light]. Pour se faire il faut modifier le retour de la fonction [I]authorize()[/I].[/FONT] [/LIST] [INDENT][FONT=MyriadPro Light][PHP]<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class WorkRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ // ]; } } [/PHP][/FONT][/INDENT][/INDENT] [FONT=MyriadPro]Les règles de validation se renseignent dans un tableau[/FONT][FONT=MyriadPro Light], la clé correspond à votre champs et la valeur correspond à une suite de règles que je vous invite à lire dans la documentation. [COLOR=#0059b3][fa]fa-border fa-link[/fa] [/COLOR][URL]https://laravel.com/docs/5.3/validation#available-validation-rules[/URL][/FONT] [INDENT][LIST=1] [*][FONT=MyriadPro Light]Ajoutez les clés et valeurs que [/FONT][FONT=MyriadPro]j'ai moi même mise dans le tableau[/FONT][FONT=MyriadPro Light].[/FONT] [/LIST] [INDENT][FONT=MyriadPro Light][PHP]<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class WorkRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'name' => 'required|min:2|max:255', 'slug' => 'required|min:2|max:255|regex:/^[a-z0-9]+(?:-[a-z0-9]+)*$/', 'description' => 'required|min:2', //'categorie_id => 'exists:work_categories,id' 'work' => 'required|mimes:png' ]; } } [/PHP][/FONT][/INDENT] [LIST=1] [*][FONT=MyriadPro Light]Enfin, il faut déclarer à Laravel que nous utilisons ces règles de validation, pour se faire nous allons modifier le paramètre de notre fonction [I]store()[/I]. [U]N'oubliez pas de supprimer l'utilisation de la classe [I]Request [/I]([I]use Illuminate\Http\Request;[/I]) et d'ajouter notre classe [I]WorkRequest[/I] ([I][SIZE=4]use App\Http\Requests\WorkRequest;[/SIZE][/I])[/U][/FONT] [/LIST] [INDENT][FONT=MyriadPro Light][PHP]<?php namespace App\Http\Controllers\Admin; use App\Http\Requests\WorkRequest; use App\Http\Controllers\Controller; use App\Work; class WorkController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { return view('admin.works.create'); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(WorkRequest $request) { $work = Work::create($request->all()); $request->file('work')->storeAs('works', $work->id.'.png'); return redirect()->route('admin.works.index'); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { // } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { // } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { // } } [/PHP][/FONT][/INDENT] [LIST=1] [*][FONT=MyriadPro Light]Si vous tentez maintenant de soumettre le formulaire en commentant des erreurs [/FONT][FONT=MyriadPro]vous aurez un message d'erreur pour chaque cas spécifié par nos règles[/FONT][FONT=MyriadPro Light].[/FONT] [/LIST][/INDENT] [CENTER][FONT=MyriadPro Light][ATTACH=full]105209[/ATTACH][/FONT][/CENTER] [INDENT][INDENT][FONT=MyriadPro][FA]fa-border fa-check-circle[/FA] AFFICHER UN MESSAGE DE SUCCES[/FONT] [FONT=MyriadPro Light] Bon, c'est très bien de pouvoir afficher des messages d'erreur mais [/FONT][FONT=MyriadPro]nous voulons aussi afficher des messages de succès[/FONT][FONT=MyriadPro Light] pour cela nous devons modifier la fonction[I] store()[/I] de notre controller mais également nos vues.[/FONT] [LIST=1] [*][FONT=MyriadPro Light]Modifiez dans un premier temps la réponse de la fonction[I] store()[/I] pour utiliser des messages [I]flash[/I], c'est à dire [U]des messages stockés par le biais de la session[/U].[/FONT] [/LIST] [INDENT][FONT=MyriadPro Light][PHP] /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(WorkRequest $request) { $work = Work::create($request->all()); $request->file('work')->storeAs('works', $work->id.'.png'); return redirect()->route('admin.works.index')->with('success', 'Création publiée avc succès.'); }[/PHP][/FONT][/INDENT] [LIST=1] [*][FONT=MyriadPro Light]Modifiez maintenant la fonction[I] index()[/I] [/FONT][FONT=MyriadPro]pour afficher une vue[/FONT][FONT=MyriadPro Light] que vous allez créer juste après.[/FONT] [/LIST] [INDENT][FONT=MyriadPro Light][PHP] /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { return view('admin.works.index'); }[/PHP] [HTML]@extends('layouts.app') @section('content') <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> @if (session('success')) <div class="alert alert-success"> {{ session('success') }} </div> @endif </div> </div> </div> @endsection [/HTML][/FONT][/INDENT] [LIST=1] [*][FONT=MyriadPro Light]Si nous ajoutons une création [/FONT][FONT=MyriadPro]vous pourrez voir le message de succès[/FONT][FONT=MyriadPro Light].[/FONT] [/LIST][/INDENT] [CENTER][FONT=MyriadPro Light][ATTACH=full]105211[/ATTACH][/FONT][/CENTER][/INDENT] [FONT=MyriadPro][FA]fa-border fa-edit[/FA] MODIFICATION D'UNE CREATION[/FONT] [FONT=MyriadPro Light] Maintenant que nous avons réalisé la fonctionnalité de publication de création, [/FONT][FONT=MyriadPro]nous devons pouvoir les modifier quand nous le voulons[/FONT][FONT=MyriadPro Light], personnellement je vais retirer le [I]routing[/I] concernant la fonction [I]show[/I] car je ne la trouve pas utile dans notre cas, ainsi pour pouvoir modifier une création le graphiste aura une icône lui permettant d'accéder à sa partie administration, mais cette fois ci depuis la partie publique si je peux dire.[/FONT] [LIST=1] [*][FONT=MyriadPro Light]Pour exclure le [I]routing [/I]concernant la fonction [I]show[/I] il suffit d'utiliser une fonction disponible depuis notre fichier [I]web.php[/I], qui gère nos routes.[/FONT] [/LIST] [INDENT][FONT=MyriadPro Light][PHP]<?php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); }); Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'as' => 'admin.', 'middleware' => 'auth'], function () { // ici nous allons renseigner les URL correspondant à des controllers et actions précises. Route::resource('works', 'WorkController', ['except' => ['show']]); }); //Auth::routes(); Route::group(['namespace' => 'Auth'], function () { Route::get('/login', 'LoginController@showLoginForm')->name('login'); Route::post('/login', 'LoginController@login'); Route::post('/logout', 'LoginController@logout')->name('logout'); }); Route::get('/home', 'HomeController@index'); [/PHP][/FONT][/INDENT] [LIST=1] [*][FONT=MyriadPro Light]Modifier la fonction edit() pour retourner une vue nommée tout simplement [I]edit[/I].[/FONT] [/LIST] [INDENT][FONT=MyriadPro Light][PHP] /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { return view('admin.works.edit'); }[/PHP][/FONT][/INDENT] [FONT=MyriadPro Light]Il manque plus qu'à passer notre création à notre vue, mais avant cela il faudrait vérifier si elle existe et donc effectuer une requête via notre model [I]Work[/I].[/FONT] [LIST=1] [*][FONT=MyriadPro Light]Mais il existe une façon [U]encore plus simple de vérifier cela[/U], c'est en passant directement en paramètre [/FONT][FONT=MyriadPro]un objet de notre model[/FONT][FONT=MyriadPro Light].[/FONT] [/LIST] [INDENT][FONT=MyriadPro Light][PHP] /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit(Work $work) { return view('admin.works.edit'); }[/PHP][/FONT][/INDENT] [LIST=1] [*][FONT=MyriadPro Light]Je vous invite maintenant à essayer d'accéder à des URLs de ce type : [I][URL]http://mon-environnement.fr/admin/works/1/edit[/URL][/I] et vous aurez une erreur vous indiquant que la vue demandée n'existe pas. Essayez par la suite un identifiant de création qui n'existe pas par exemple [I]393939[/I].[/FONT] [/LIST] [CENTER][FONT=MyriadPro Light][ATTACH=full]105213[/ATTACH][/FONT][/CENTER] [LIST=1] [*][FONT=MyriadPro Light]Comme vous pouvez le voir [/FONT][FONT=MyriadPro]une erreur nous est indiquée[/FONT][FONT=MyriadPro Light], nous verrons plus tard comment modifier cela.[/FONT] [*][FONT=MyriadPro Light]Créez ensuite votre vue [I]edit [/I]qui est sensiblement la même que celle de création.[/FONT] [/LIST] [INDENT][FONT=MyriadPro Light][HTML]@extends('layouts.app') @section('content') <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <div class="panel panel-default"> <div class="panel-heading">Modification d'une création : {{ $work->name }}</div> <div class="panel-body"> <form class="form-horizontal" role="form" method="POST" action="{{ route('admin.works.update', $work->id) }}"> {{ csrf_field() }} {{ method_field('PATCH') }} <div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}"> <label for="name" class="col-md-4 control-label">Nom</label> <div class="col-md-6"> <input id="name" type="text" class="form-control" name="name" value="{{ $work->name }}" required autofocus> @if ($errors->has('name')) <span class="help-block"> <strong>{{ $errors->first('name') }}</strong> </span> @endif </div> </div> <div class="form-group{{ $errors->has('slug') ? ' has-error' : '' }}"> <label for="name" class="col-md-4 control-label">Slug</label> <div class="col-md-6"> <input id="slug" type="text" class="form-control" name="slug" value="{{ $work->slug }}" required autofocus> @if ($errors->has('slug')) <span class="help-block"> <strong>{{ $errors->first('slug') }}</strong> </span> @endif </div> </div> <div class="form-group{{ $errors->has('description') ? ' has-error' : '' }}"> <label for="description" class="col-md-4 control-label">Description</label> <div class="col-md-6"> <textarea class="form-control" name="description" id="description">{{ $work->description }}</textarea> @if ($errors->has('description')) <span class="help-block"> <strong>{{ $errors->first('description') }}</strong> </span> @endif </div> </div> <!-- A SUPPRIMER APRES LE TEST !--> <input type="hidden" name="categorie_id" value="1"/> <div class="form-group"> <div class="col-md-8 col-md-offset-4"> <button type="submit" class="btn btn-primary"> Sauvegarder </button> </div> </div> </form> </div> </div> </div> </div> </div> @endsection [/HTML][/FONT][/INDENT] [LIST=1] [*][FONT=MyriadPro Light]Comme vous pouvez le voir en vous rendant sur la page d'édition,[U] j'ai volontairement supprimé le champs permettant de transférer un fichier[/U], ainsi il faut modifier nos règles de validation et traiter en fonction de [/FONT][FONT=MyriadPro]la méthode HTTP [FA]fa-server[/FA][/FONT][FONT=MyriadPro Light] envoyée.[/FONT] [/LIST] [INDENT][FONT=MyriadPro Light][PHP]<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class WorkRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { switch($this->method()) { case 'GET': case 'DELETE': { return []; } case 'POST': { return [ 'name' => 'required|min:2|max:255', 'slug' => 'required|min:2|max:255|regex:/^[a-z0-9]+(?:-[a-z0-9]+)*$/', 'description' => 'required|min:2', //'categorie_id => 'exists:work_categories,id' 'work' => 'required|mimes:png' ]; } case 'PUT': case 'PATCH': { return [ 'name' => 'required|min:2|max:255', 'slug' => 'required|min:2|max:255|regex:/^[a-z0-9]+(?:-[a-z0-9]+)*$/', 'description' => 'required|min:2', //'categorie_id => 'exists:work_categories,id' 'work' => 'mimes:png' ]; } default:break; } } } [/PHP][/FONT][/INDENT] [LIST=1] [*][FONT=MyriadPro Light]Maintenant que nous modifié notre fichier de validation de requêtes, il faut modifier notre fonction [I]update()[/I] qui va prendre en paramètre ce même fichier, de la même façon que la fonction [I]store()[/I].[/FONT] [/LIST] [INDENT][FONT=MyriadPro Light][PHP] /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(WorkRequest $request, Work $work) { $work->update($request->all()); return back(); } [/PHP][/FONT][/INDENT] [LIST=1] [*][FONT=MyriadPro Light]Tentez de soumettre le formulaire et [/FONT][FONT=MyriadPro]tout fonctionne dans l'ordre[/FONT][FONT=MyriadPro Light].[/FONT] [/LIST] [FONT=MyriadPro][FA]fa-border fa-trash[/FA] SUPPRESSION D'UNE CREATION[/FONT] [FONT=MyriadPro Light] Pour terminer cet épisode nous allons ajouter la fonctionnalité de suppression, visuellement se sera très simple : nous ajouterons un bouton "[I]Supprimer[/I]" sur la page d'édition qui va soumettre en réalité un formulaire caché, tout ceci avec un peu de JavaScript. :)[/FONT] [LIST=1] [*][FONT=MyriadPro Light]Rendez-vous dans le controller [I]WorkController[/I] comme d'habitude, à la fonction [I]destroy() [/I]vous allez la modifier pour ajouter l'objet de notre modèle [I]Work[/I]. [PHP] /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy(Work $work) { // }[/PHP][/FONT] [*][FONT=MyriadPro Light]Enfin, [/FONT][FONT=MyriadPro]ajoutons la fonction de suppression [/FONT][FONT=MyriadPro Light]qui est accessible depuis l'objet de notre modèle.[/FONT] [/LIST] [INDENT][FONT=MyriadPro Light][PHP] /**[/INDENT] * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy(Work $work) { $work->delete(); return redirect()->route('admin.works.index')->with('success', 'Création supprimée avec succès.'); }[/PHP][/FONT][/INDENT] [LIST=1] [*][FONT=MyriadPro Light]Et pour terminer, modifiez notre vue [I]edit.[/I][/FONT] [/LIST] [INDENT][FONT=MyriadPro Light][HTML]@extends('layouts.app') @section('content') <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <div class="panel panel-default"> <div class="panel-heading">Modification d'une création : {{ $work->name }}</div> <div class="panel-body"> <form class="form-horizontal" role="form" method="POST" action="{{ route('admin.works.update', $work->id) }}"> {{ csrf_field() }} {{ method_field('PATCH') }} <div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}"> <label for="name" class="col-md-4 control-label">Nom</label> <div class="col-md-6"> <input id="name" type="text" class="form-control" name="name" value="{{ $work->name }}" required autofocus> @if ($errors->has('name')) <span class="help-block"> <strong>{{ $errors->first('name') }}</strong> </span> @endif </div> </div> <div class="form-group{{ $errors->has('slug') ? ' has-error' : '' }}"> <label for="name" class="col-md-4 control-label">Slug</label> <div class="col-md-6"> <input id="slug" type="text" class="form-control" name="slug" value="{{ $work->slug }}" required autofocus> @if ($errors->has('slug')) <span class="help-block"> <strong>{{ $errors->first('slug') }}</strong> </span> @endif </div> </div> <div class="form-group{{ $errors->has('description') ? ' has-error' : '' }}"> <label for="description" class="col-md-4 control-label">Description</label> <div class="col-md-6"> <textarea class="form-control" name="description" id="description">{{ $work->description }}</textarea> @if ($errors->has('description')) <span class="help-block"> <strong>{{ $errors->first('description') }}</strong> </span> @endif </div> </div> <!-- A SUPPRIMER APRES LE TEST !--> <input type="hidden" name="categorie_id" value="1"/> <div class="form-group"> <div class="col-md-8 col-md-offset-4"> <button type="submit" class="btn btn-primary"> Sauvegarder </button> <button type="submit" class="btn btn-danger" onclick="event.preventDefault(); document.getElementById('delete-form').submit();"> Supprimer </button> </div> </div> </form> <form id="delete-form" action="{{ route('admin.works.destroy', $work->id) }}" method="POST" style="display: none;"> {{ csrf_field() }} {{ method_field('DELETE') }} </form> </div> </div> </div> </div> </div> @endsection [/HTML][/FONT][/INDENT] [CENTER][FONT=MyriadPro-Light][ATTACH=full]105214[/ATTACH] [ATTACH=full]105215[/ATTACH] [/FONT][/CENTER] [FONT=MyriadPro Light] C'est tout pour ce deuxième épisode, on se trouve pour [/FONT][FONT=MyriadPro]le 3ème[/FONT][FONT=MyriadPro Light] dans lequel nous ferons la parte catégories des créations ainsi que la partie contact.[/FONT] [CENTER][/CENTER] [FONT=MyriadPro Light]Amicalement, [FA]fa-user[/FA] Rivals[/FONT] [/QUOTE]
Insérer les citations…
Vérification
Publier la réponse
Forums
Forums généraux
Informatique
Développement
Laravel 5 : création d'un portfolio de graphiste (ajout, modification et suppression de création) #2
Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
Acceptez
En savoir plus.…
Haut