IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Laravel PHP Discussion :

Etendre class FormBuilder.php [4.1]


Sujet :

Laravel PHP

  1. #1
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut Etendre class FormBuilder.php
    Bonjour,

    J'essaye de migrer une application FuelPHP vers Laravel4, le tout en modifiant le minimum de ligne

    Dans leur convention de nommage, les deux framework sont proche, mais les paramètres ne sont pas forcement introduit dans le même sens dans les méthodes.

    Par exemple, pour FuelPHP faire un , revient à faire dans Laravel .

    Par contre on peut faire un dans Laravel.

    Vous l'aurez compris, pour ne pas repasser dans dans tout mon code je veux surcharger une méthode....bon après avoir un peu fouiller je fais ceci

    FormBuilder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <?php
     
    namespace maitrepylos\Extension;
     
     
    class FormBuilder extends \Illuminate\Html\FormBuilder {
     
        public function __construct(HtmlBuilder $html, UrlGenerator $url, $csrfToken)
        {
            parent::__construct($html,$url,$csrfToken);
     
        }
     
        public function input($name, $value = null, $options = array(),$type = 'text')
        {
            parent::input($type, $name, $value = null, $options = array());
        }
     
     
     
    }
    HtmlServiceProvider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <?php
     
    namespace maitrepylos\Extension;
     
     
    class HtmlServiceProvider extends \Illuminate\Html\HtmlServiceProvider {
     
        /**
         * Register the form builder instance.
         *
         * @return void
         */
        protected function registerFormBuilder()
        {
            parent::registerFormBuilder();
        }
     
     
     
     
    }
    Et dans app/conog/app.php, je remplace ma HtmlserviceProvider par le mien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    'Illuminate\Hashing\HashServiceProvider',
    		'maitrepylos\Extension\HtmlServiceProvider',
    		'Illuminate\Foundation\Providers\KeyGeneratorServiceProvider',
    Naturellement j'ai l'erreur suivante :
    Symfony \ Component \ Debug \ Exception \ FatalErrorException
    Class 'maitrepylos\Extension\HtmlServiceProvider' not found
    J'ai l'impression de chercher midi à quatorze heure.

    Auriez-vous une piste pour moi faire cela beaucoup plus facilement ?

    Merci.

  2. #2
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 103
    Points : 4 449
    Points
    4 449
    Par défaut
    Bonjour,

    il me semble que tu as un problème de namespace non déclaré Maitrepylos

    maitrepylos devrait être déclaré dans workbench (un package local Maitrepylos\Extension)
    ou alors
    dans tu utilises composer.json "psr-0"
    $moi= ( !== ) ? : ;

  3. #3
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Oui sauf que je ne veux pas faire un package mais simplement étende une classe

    Ok avec composer dump-autoload, cela passe, mais ma classe n'est pas étendue ?

    Je continue à chercher.

  4. #4
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 103
    Points : 4 449
    Points
    4 449
    Par défaut
    Ok avec composer dump-autoload,
    oops, alors ignore le reste !!!!

    Bien compris, mais ton problème vient du namespace "Maitrepylos", simplement php ne trouve pas Maitrepylos!

    composer dump-autoload génère le class map, tu peux le voir dans :
    /vendor/composer/autoload_classmap.php

    si tu ne trouves pas Maitrepylos/... c'est que tu ne sais pas créer de namespace


    tu donnes aucune infos sur la facon de le déclarer et vu le nom il me semble logique que tu as utilisé workbench : un package c'est juste un namespace défini dans composer.json et un fichier php

    sinon,plus compliqué, manuellement(fichier .json et structure) (psr-0) :
    créer un namespace il faut passer par composer.json
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    "autoload": {
            "classmap": [
                "app/commands",
                "app/controllers",
                "app/services",
                "app/database/migrations",
                "app/database/seeds",
            ],
            "psr-0": {
                "Maitrepylos": "maitrepylos/src"
            }
        },
    /maitrepylos/src/Maitrepylos/ ***.php
    $moi= ( !== ) ? : ;

  5. #5
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 103
    Points : 4 449
    Points
    4 449
    Par défaut
    j'ai testé, et ca marche PAS ou alors trop bien
    et oui en interne dans formbuilder il y a des appels a la méthde input() : hidden(), text() ... pasword()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function text($name, $value = null, $options = array())
    	{
    		return $this->input('text', $name, $value, $options);
    	}
    et la c'est la cata ! les params ne sont plus bons obligé de réécrire aussi ces méthodes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?php // app/extension/FormBuilder.php
    namespace App\Extension;
     
    use \Illuminate\Routing\UrlGenerator;
    use \Illuminate\Html\HtmlBuilder;
     
    class FormBuilder extends \Illuminate\Html\FormBuilder {
     
        public function __construct(HtmlBuilder $html, UrlGenerator $url, $csrfToken)
        {
            parent::__construct($html,$url,$csrfToken);
        }
     
        public function input($name, $value = null, $options = array(), $type = 'text')
        {
            parent::input($type, $name, $value , $options );
        }
        public function hidden($name, $value = null, $options = array())
        {
    // appel a parent sinon params plus bons :(
    	return parent::input('hidden', $name, $value, $options);
        }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php // app/extension/HtmlServiceProvider.php
    namespace App\Extension;
    use App\Extension\FormBuilder;
     
    class HtmlServiceProvider extends \Illuminate\Html\HtmlServiceProvider {
     
        /**
         * Register the form builder instance.
         *
         * @return void
         */
        protected function registerFormBuilder()
        {
            //parent::registerFormBuilder();
    		$this->app['form'] = $this->app->share(function($app)
    		{
    			$form = new FormBuilder($app['html'], $app['url'], $app['session.store']->getToken());
     
    			return $form->setSessionStore($app['session.store']);
    		});        
        }
     
    }
    $moi= ( !== ) ? : ;

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Bon pour Info, je sais créer un namespace et mon fichie .json est correcte.

    D'ailleurs je te le dit ça passe

    En fait comme tu l'écrit il faut que je surcharge toute la classe et bon ça je pas près de la faire.

    Je pensais Laravel plus simple à étendre.....en fait cela reste du Symphony et usine à Gaz.

    Ok....merci pour ton aide.

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 103
    Points : 4 449
    Points
    4 449
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Je pensais Laravel plus simple à étendre.....
    Normalement on "étend" le framework avec de nouveaux packages.
    Mais ici, tu ne cherches pas véritablement à étendre Laravel mais à le réécrire :
    réécrire Form comme Fuel, (puis?)
    réécrire Input,
    réécrire Html ...


    Citation Envoyé par MaitrePylos Voir le message
    ...en fait cela reste du Symphony et usine à Gaz.
    Il ne prend de Symphony que http et console; justement pas cette partie. Mais effectivement comme Symphony, Laravel utilise Composer et en interne les mêmes design pattern(ce qui est logique)
    $moi= ( !== ) ? : ;

  8. #8
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    OK, mais je crée un package avec le workbench et tout et tout.

    Je ne vais pouvoir l'appeler 'Form', il y aura risque de conflit.

    Du coup si je prend un autre nom, mon problème reste entier

    Je vais donc persévérer un peu avec Laravel et importer de FuelPHP à coup de Sed et Awk, ce qui me semble le plus simple pour le moment.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PDO] Site de class en PHP
    Par Seth77 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 17/08/2006, 21h34
  2. Problème de classe avec PHP 5 ?
    Par MaTHieU_ dans le forum Langage
    Réponses: 9
    Dernier message: 15/07/2006, 11h36
  3. Réponses: 4
    Dernier message: 07/05/2006, 01h36
  4. [POO] faire des classes en php
    Par gromit83 dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2006, 16h10
  5. Réponses: 3
    Dernier message: 23/08/2004, 17h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo