Un package Laravel réutilisable avec une vue et une route en toute simplicité

Nous allons nous faire un petit package Laravel 4 qui nous servira de point de départ a de futur projets.

1) Configuration de Laravel

Editer le fichier /app/config/workbench.php : saisissez votre email et votre nom.

2) Génération du squelette

Pour plus de commoditées notre pacquage aura tout au long de cet article le nom de « arbre« . Donc changez toujours « arbre » par le nom de votre package :)
En ligne de commande dans votre dossier Laravel entrez la commande :

php artisan help workbench pour de l’aide
php artisan workbench LoginGitHub/arbre –resources

Si vous n’avez pas de « LoginGitHub » alors saisissez votre prenom, mais ce package ne sera que pour vous.

Artisan vient de générer le squelette du package Laravel dans /workbenck/logingithub/ »arbre »

arborescence package

3) Lier notre package a notre site Laravel

Editez le fichier /app/config/app.php
dans le tableau « providers » ajoutez la ligne :    ‘Logingithub\Arbre\ArbreServiceProvider’,
N’hésitez surtout pas a faire un « php artisan dump-autoload« , cette commande doit normalement lister votre package « arbre ». Voila, vous avez créé un package Laravel 4 et il est bien reconnu et chargé par votre site.

4) Configuration de notre package

L’arborescence créé par artisan et en fait la même qu’un site classique Laravel; on retouve :
/public/  ou nous mettons nos feuilles de styles, images et javacript et
/src/ qui correspond a /app/ pour un site avec les mêmes dossiers.

Il nous faut en premier lieu créer un fichier de configuration dans /src/config/

<?php // src/config/config.php
  return array(
      'url' => '/arbre',
      'layout' => 'arbre::layout',
      'view' => 'arbre::index' 
      // 'jquery'=> false
  );

Notez qu’il existe aussi un dossier /src/lang qui s’utilise par un appel a Lang::get(‘arbre::traduction’)

5) Les vues

Dans  le dossier /src/views/
Nous créons un fichier layout.blade.php (voir config.php ->layout)

<html>
    <body>
        @yield('content')
    </body>
</html>

Nous créons un fichier index.blade.php (voir config.php ->view)

@extends(\Config::get('arbre::layout'))
@section('content')
   <h3>Arbre</h3>
@stop

Pour afficher ces vues il nous faut une route, créons un fichier /src/routes.php et filters.php

<?php // src/routes.php
Route::get( \Config::get('arbre::config.url') , array(function() {
    return View::make( \Config::get('arbre::config.view') );
}));

Pour finir éditer le fichier /src/LoginGitHub/arbre/ArbreServiceProvider.php et ajouter dans la méthode boot() les 2 include, se qui va charger automatiquement notre route dans notre site laravel :

public function boot() {
	$this->package('LoginGitHub/arbre');
	include __DIR__.'/../../routes.php';
	include __DIR__.'/../../filters.php';
}

Voila nous avons un package avec une vue particulière sur la route « /arbre« . Il charge bien notre layout et vue index.

Testons notre fichier de configuration en ajoutant le layout principal de mon site :

<?php
  return array(
      'url' => '/arbre',
      'layout' => 'arbre::layout', // + pris en compte
      'layout' => 'frontend/layouts/default',
      'view' => 'arbre::index'
  );

Cette fois ci, notre vue « index » est parfaitement intégrée dans notre site

6) Un contrôleur

Dans notre espace de nom, nous créons un controleur :

/src/Logingithub/arbre/Controleur.php ( ou /src/Logingithub/arbre/controllers/Controleur.php)

<?php  namespace Logingithub\Arbre;

class Controleur extends \Illuminate\Routing\Controllers\Controller {
    public function index()
    {
        return \View::make( \Config::get('arbre::config.view') )
            ->with('path', app_path() );
    }
}

ce qui nous permet d’écrire une route plus classique du type :

<?php // src/routes.php

Route::get(  \Config::get('arbre::config.url') ,
             'Logingithub\Arbre\Controleur@index');

7) Déploiement

Si vous utilisez GitHub et désirez redistribuer votre package, il n’est pas facile de modifier des fichiers dans vendor (et écrasement a l’update), donc il faut utiliser la commande  php artisan config:publish : le dossier config du package est simplement recopié dans /app/config/packages/Logingithub/arbre/
php artisan asset:publish recopie le dossier public du package dans /public/packages/

A ce moment notre package n’utilise plus que ces dossiers remontés.

Attention :

L’utilisation de Framework css et Javascript rend le package dépendant voire même inutilisable.

1) si vous importez jquery(ou autre) dans votre vue,
il faut pouvoir le dévalider dans config.php, ce(s) script(s) est peut être déja chargé par le site ou est incompatible avec les scripts du site.
2) si vous utilisez un framework css,
de la même manière il est peut-être déjà chargé ou incompatible. Vous pouvez proposer 2-3 vues avec des framework  particuliers (choix dans config.php), sinon l’utilisateur peut recopier votre vue dans son dossier /views/ et la modifier a son aise (view est dans config.php).

Share Button

Vous devriez aimer...