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

MkFramework Discussion :

Service d'import en BDD


Sujet :

MkFramework

  1. #1
    Candidat au Club
    Service d'import en BDD
    Bonjour,

    Dans mes projets, j'ai besoin d'importer en BDD des infos (via des parser web ou des fichiers locaux).
    J'ai donc créé dans la classe de mon module une méthode qui réalise cet import que j'appel depuis une vue.

    cet appel se déroule depuis une page du type :
    index.php?:nav=module::import

    Je souhaiterai croner ces imports. Sous symfony, il y a des notions de services que l'on peut appeler directement depuis l'user systeme root ou www-data.

    Quelle serait la méthode la plus pratique avec MKframework pour réaliser cet automatisme ?
    Je pensais à du curl avec une authentification, mais peut-être y a t'il une méthode plus élégante déjà prévue dans le framework que je n'aurai pas encore vu dans les tutos ou dans ce forum ?


    D'avance merci.

  2. #2
    Rédacteur

    Oui vous avez plus simple que de passer par curl

    dans votre répertoire public/

    créé le fichier suivant cmd.php
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    <?php
    /*-----------------------------------------------------------------------------------
    Auteur: Mika http://mkdevs.com
    Page: tout passe par la; c'est le moteur du site, il gere les appels aux modules/action...
    
    Description:
    C'est ici que vous pouvez installer ci-besoin un compteur de visite
    -----------------------------------------------------------------------------------*/
     
    /* decommenter pour utiliser zendframework a partir de la 1.8
    set_include_path(get_include_path() . PATH_SEPARATOR .'../../lib/');
    
    require_once 'Zend/Loader/Autoloader.php';
    $autoloader = Zend_Loader_Autoloader::getInstance();
    $autoloader->setFallbackAutoloader(false);
    */
     
    $tParam=array(
    	':nav'=> $argv[1]
    );
     
    //on parse le fichier ini pour trouver l'adresse de la librairie
    $tIni=parse_ini_file('../conf/path.ini.php',true);
    //enregistrement de l'auto loader du framework
    include($tIni['path']['lib'].'/class_root.php');
     
    //enregistrement de l'autoloader
    include($tIni['path']['plugin'].'/plugin_autoload.php');
    spl_autoload_register(array('plugin_autoload','autoload'));
     
     
    //pour gerer toutes les erreurs en exception
    function exception_error_handler($errno, $errstr, $errfile, $errline ) {
      throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
    }
    set_error_handler("exception_error_handler");
     
    $oRoot=new _root();
    $oRoot->setConfigVar('path',$tIni['path']);
     
    //decommenter pour activer le cache de fichier de configuration
    //$oRoot->setConfigVar('cache.conf.enabled',1);
     
    $oRoot->addConf('../conf/mode.ini.php');
    $oRoot->addConf('../conf/connexion.ini.php');
    $oRoot->addConf('../conf/site.ini.php');
    $oRoot->addRequest($tParam);
    $oRoot->run();


    et pour appeler par exemple votre module import
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
    cd cheminDeLaplication/public
    php cmd.php module::import


    Comme vous pouvez le voir, pour faire de la ligne de commande on créé un tableau qui recoit pour le champ ":nav" la valeur du premier argument de la ligne de commande ($argv[1])
    ensuite, libre à vous de lui passer un argument supplémentaire au format json ou autre et de le renseigner dans ce tableau $tParam qui sera accessible via l'habituel _root::getParam()
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Candidat au Club
    Merci pour la réponse,
    cela fonctionne !

  4. #4
    Candidat au Club
    J'ai encore deux petites questions :

    Si un des modules est configuré avec une authentification requise, comment dois-je configurer mon script cmd.php ?
    la configuration se trouve ici : $oRoot->addConf('../conf/connexion.ini.php');
    mais est-ce que je peux la modifier à la volée ? je dois lui passer des paramètres d'authentification ?




    Concrètement le passage de paramètres doit prendre quelle syntaxe ?
    si j'essaye d'afficher un show?id=1

    je lance la commande:
    php cmd.php module::show 1

    voila mon tableau de paramètres dans cmd.php :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $tParam=array(
        ':nav'=> $argv[1],
        '?id'=> $argv[2]
    );


    le retour dans mon terminal:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [argv] => Array<br />
            (<br />
                [0] => cmd.php<br />
                [1] => module::show<br />
                [2] => 1<br />
            )<br />


    il récupère bien le paramètre que j'ai assigné au tableau, je cherche l'id 1 (qui existe bien en bdd et qui s'affiche dans le navigateur avec le même paramètre). Mais la page n'est pas récupérée j'ai une erreur Undefined index: REQUEST_METHOD.


    merci d'avance.

  5. #5
    Rédacteur

    Pas
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $tParam=array(
        ':nav'=> $argv[1],
        '?id'=> $argv[2]
    );


    mais (sans le ?)
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $tParam=array(
        ':nav'=> $argv[1],
        'id'=> $argv[2]
    );


    c'est un tableau associatif, tout simplement

    vous pouvez egalmeent passer une chaine de parametre json, pour cela, modifier ainsi:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $tParam=array();
    $tParam[':nav']=$argv[1];
     
    $tArg=(array)json_decode($argv[2]);
     
    $tParam=array_merge($tParam, $tArg );



    puis un
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    php cmd.php default::test '{"id":"2","side":"buy"}
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  6. #6
    Candidat au Club
    Merci pour ces réponses, c'est bien compris.


    Pour ma première question à propos de l'authentification d'un module, comment est ce que je peux l'outre-passer dans l'appel via une cmd ?

  7. #7
    Rédacteur

    Plusieurs solutions pour votre cas, 2 exactement:

    1. vous créez un module spécial qui sera accessible via votre ligne de commande, où vous appellerez votre code
    2. vous ajoutez dans votre fichier cmd, un fichier de configuration différent qui désactivera la partie authentification

    pour le point 2: vous avez dans cmd.php

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    $oRoot->addConf('../conf/mode.ini.php');
    $oRoot->addConf('../conf/connexion.ini.php');
    $oRoot->addConf('../conf/site.ini.php');


    ajoutez dans votre repertoire conf un fichier cmd.ini.php par exemple
    puis chargez le:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $oRoot->addConf('../conf/mode.ini.php');
    $oRoot->addConf('../conf/connexion.ini.php');
    $oRoot->addConf('../conf/site.ini.php');
    $oRoot->addConf('../conf/cmd.ini.php');


    Et il incluera le code suivant:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    [auth]
    enabled=0
    ;liste des modules non concerne par l'auth: separe par des virgules
    module.disabled.list=module1,module2,module3


    vous noterez: le enabled à zéro, et la liste des modules à desactiver l'authentification

    ce fichier de config désactivant l'auth ne sera chargé logiquement que par ce fichier cmd.php

    Pour des raisons de sécurité, il faudra dans ce cas ajouter une portion de code dans cmd.php pour confirmer qu'on est bien en ligne de commande et que la personne n'a pas entrer l'adresse monsite.com/cmd.php

    Ajoutez pour cela le code suivant dans cmd.php
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    if(false===isset($argv)){
    	die('uniquement valable en ligne de commadne');
    }
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  8. #8
    Candidat au Club
    Bonjour,

    Merci beaucoup pour tout ça, c'est parfait !

  9. #9
    Rédacteur

    Clin d'oeil à l'autre discussion

    Le nouveau template disponible "software craftsmanship" simplifiera cette multiplicité d'axe d'appel d'une application (version du framework 4.130

    Avec une classe business regroupant le code métier, on peut avoir à la fois un appel web, webservice ou ligne de commande pour travailler avec ce même code métier
    http://mkframework.com/scraftsmanship.html
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

###raw>template_hook.ano_emploi###