Page 1 sur 1

Problème de séparation de classes

Posté : 19 mai 2011, 11:27
par kinect
Bonjour,

alors je suis nouveau autant sur le forum que dans le développement en PHP(quoi que j'ai déjà quelques connaissances xD) ! J'aurais besoin d'un peu d'aide en ce qui concerne la POO(je pense =S ) en PHP !!! J'utilise le framework de la bibliothèque de PEAR, 'html_quickform2' qui me permet de générer des formulaires plus rapidement. Mais voila je vous montre un code qui fait parti de l'exemplaire disponible :
<?php
/**
 * Usage example for HTML_QuickForm2_Controller: wizard
 *
 * @version SVN: $Id: wizard.php 295963 2010-03-08 14:33:43Z avb $
 * @author  Alexey Borzov <[email protected]>
 * @ignore
 */

require_once 'HTML/QuickForm2.php';
require_once 'HTML/QuickForm2/Controller.php';
require_once 'HTML/QuickForm2/Renderer.php';

// Load some default action handlers
require_once 'HTML/QuickForm2/Controller/Action/Next.php';
require_once 'HTML/QuickForm2/Controller/Action/Back.php';
require_once 'HTML/QuickForm2/Controller/Action/Jump.php';
require_once 'HTML/QuickForm2/Controller/Action/Display.php';

// Start the session, form-page values will be kept there
session_start();

class PageFirst extends HTML_QuickForm2_Controller_Page
{
    protected function populateForm()
    {
        $fs = $this->form->addElement('fieldset')->setLabel('Wizard page 1 of 3');

        $radioGroup = $fs->addElement('group')->setLabel('Are you absolutely sure?');
        $radioGroup->addElement('radio', 'iradYesNo', array('value' => 'Y'), array('content' => 'Yes'));
        $radioGroup->addElement('radio', 'iradYesNo', array('value' => 'N'), array('content' => 'No'));

        $fs->addElement('submit', $this->getButtonName('next'), array('value' => 'Next >>'));

        $radioGroup->addRule('required', 'Check Yes or No');

        $this->setDefaultAction('next', 'empty.gif');
    }
}

class PageSecond extends HTML_QuickForm2_Controller_Page
{
    protected function populateForm()
    {
        $fs = $this->form->addElement('fieldset')->setLabel('Wizard page 2 of 3');

        $nameGroup = $fs->addElement('group', 'name', array('id' => 'nameGrp'))
                        ->setLabel('Name:')
                        ->setSeparator(',&nbsp;');
        $nameGroup->addElement('text', 'last', array('size' => 20))
                  ->setLabel('Last')
                  ->addRule('required', 'Last name is required');
        $nameGroup->addElement('text', 'first', array('size' => 20))
                  ->setLabel('first');

        $buttonGroup = $fs->addElement('group');
        $buttonGroup->addElement('submit', $this->getButtonName('back'), array('value' => '<< Back'));
        $buttonGroup->addElement('submit', $this->getButtonName('next'), array('value' => 'Next >>'));

        $this->setDefaultAction('next', 'empty.gif');
    }
}

class PageThird extends HTML_QuickForm2_Controller_Page
{
    protected function populateForm()
    {
        $fs = $this->form->addElement('fieldset')->setLabel('Wizard page 3 of 3');

        $fs->addElement('textarea', 'itxaTest', array('rows' => 5, 'cols' => 40))
           ->setLabel('Parting words:')
           ->addRule('required', 'Say something!');

        $buttonGroup = $fs->addElement('group');
        $buttonGroup->addElement('submit', $this->getButtonName('back'), array('value' => '<< Back'));
        $buttonGroup->addElement('submit', $this->getButtonName('next'), array('value' => 'Finish'));

        $this->setDefaultAction('next', 'empty.gif');
    }
}

class ActionDisplay extends HTML_QuickForm2_Controller_Action_Display
{
    protected function renderForm(HTML_QuickForm2 $form)
    {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
    <style type="text/css">
/* Set up custom font and form width */
body {
    margin-left: 10px;
    font-family: Arial,sans-serif;
    font-size: small;
}

.quickform {
    min-width: 500px;
    max-width: 600px;
    width: 560px;
}

/* Use default styles included with the package */

<?php
    if ('@data_dir@' != '@' . 'data_dir@') {
        $filename = '@data_dir@/HTML_QuickForm2/quickform.css';
    } else {
        $filename = dirname(dirname(dirname(__FILE__))) . '/data/quickform.css';
    }
    readfile($filename);
?>
    </style>
    <title>HTML_QuickForm2 basic elements example</title>
  </head>
  <body>
<?php
    $renderer = HTML_QuickForm2_Renderer::factory('default');
    $renderer->setElementTemplateForGroupId(
        'nameGrp', 'html_quickform2_element',
        '<div class="element<qf:error> error</qf:error>"><qf:error><span class="error">{error}</span><br /></qf:error>{element}<br /><label for="{id}"><qf:required><span class="required">* </span></qf:required>{label}</label></div>'
    );
    $renderer->setTemplateForId(
        'nameGrp', '<div class="row"><label class="element"><qf:required><span class="required">* </span></qf:required>{label}</label>{content}</div>'
    );
    echo $form->render($renderer);
?>
  </body>
</html>
<?php
    }
}

class ActionProcess implements HTML_QuickForm2_Controller_Action
{
    public function perform(HTML_QuickForm2_Controller_Page $page, $name)
    {
        echo "Submit successful!<br>\n<pre>\n";
        var_dump($page->getController()->getValue());
        echo "\n</pre>\n";
    }
}

$wizard = new HTML_QuickForm2_Controller('Wizard');
$wizard->addPage(new PageFirst(new HTML_QuickForm2('page1')));
$wizard->addPage(new PageSecond(new HTML_QuickForm2('page2')));
$wizard->addPage(new PageThird(new HTML_QuickForm2('page3')));

// We actually add these handlers here for the sake of example
// They can be automatically loaded and added by the controller
$wizard->addHandler('next', new HTML_QuickForm2_Controller_Action_Next());
$wizard->addHandler('back', new HTML_QuickForm2_Controller_Action_Back());
$wizard->addHandler('jump', new HTML_QuickForm2_Controller_Action_Jump());

// This is the action we should always define ourselves
$wizard->addHandler('process', new ActionProcess());
// We redefine 'display' handler to use the proper stylesheets
$wizard->addHandler('display', new ActionDisplay());

$wizard->run();
?>

Et ce que je souhaiterais faire, c'est de pouvoir séparer chaque classe afin de pouvoir les modifier chacune sans devoir parcourir la seule page à chaque fois, et au final, avoir la même chose. Voila, je vous remercie d'avance pour votre aide ^^.

Re: Problème de séparation de classes

Posté : 19 mai 2011, 11:38
par xTG
Tu fais un fichier nommé PageFirst.class.php tu colles le code de la class dedans et dans le fichier d'où provient le code tu fais un include("pagefirst.class.php") et ainsi de suite pour toutes tes class.

Re: Problème de séparation de classes

Posté : 19 mai 2011, 12:49
par kinect
Bonjour, je te remercie pour ta réponse rapide. J'ai oublié de préciser que j'avais déjà réalisé cette manipulation et que lorsque je sépare chaque classe dans un fichier séparé et que je les déclare par la suite dans mon fichier principal, il me met comme erreur : Fatal error: Class 'HTML_QuickForm2_Controller_Page' not found in C:\wamp\www\pear\arbo_form\PageFirst.class.php on line 7 ce qui est normal puisque mes déclarations sont faites dans un 'main' à part alors pour résoudre cela, j'ai 2 cas :

cas 1 :

soit je fait un include('main.php') dans chacun de mes fichiers où se trouvent mes classes alors ça me retourne :

Fatal error: Cannot redeclare class PageFirst in C:\wamp\www\pear\arbo_form\PageFirst.class.php on line 22


cas 2 :

soit je rajoute les include nécessaires de mon framework dans quel cas, lorsque j'actualise, il ne m'affiche plus rien.....


J'ai également essayé avec un include_once('main.php') dans mon fichier PageFirst.class.php et il m'affiche bien mon formulaire mais il me retourne toujours l'erreur du cas 1 en dessous de mon formulaire et juste au dessus j'ai un texte "Envoyer", qui reste toujours afficher que je ne comprends pas trop d'où il vient

Donc voilà où j'en suis pour le moment.

Re: Problème de séparation de classes

Posté : 19 mai 2011, 13:01
par kinect
j'ai pu réglé le problème de l'affichage du texte "Envoyer" et je cherche toujours comment corriger le fatal error !!

Re: Problème de séparation de classes

Posté : 19 mai 2011, 13:05
par xTG
Ton include() doit être fait au même endroit que là où tu as coupé le code source (dans ton fichier principal : post1).
Sinon les fichiers précédents ne sont pas inclus ce qui provoque des erreurs de dépendances.