Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [PHP5] MVC ed extract()

    Salve a tutti! ^^ Ho un problema abbastanza variopinto

    Ho scritto alcune classi per le gestione di un sito web,. implementando uno schema simile al pattern MVC:

    Una classe controller carica i moduli, ovvero le altre classi php che provvedono l'output, ed inizializza la classe template.

    Quest'utlima classe carica un template html (contenente appositi tags e codice php) e lo compila con l'output dei moduli.

    in sostanza il file index.php consosterà in poche righe di inzializzazione:
    Codice PHP:
    include('controller.class.php');
    $c = new controller('templates/bubble/index.tpl');
    $roles = array('guest');
    $c->logModule("hello",$roles);
    $c->logModule("books",$roles);
    $c->view->display(); 
    Il metodo logModule(), dice al controller di caricare un modulo ed al template di valorizzare il tag con l'ouput del modulo.

    Per ottenere questo risultato procedo in un modo simile al seguente
    Codice PHP:
    $template->assignTag("nome_modulo",$modulo->output()); 
    In realtà questa operazione non deve essere fatta direttamente, ma viene mediata leggermente dal controller.

    il file html conterrà quindi tags simili al seguente
    Codice PHP:
    {$nome_modulo
    sta alla classe template riformattare il template html e valorizzare le variabili

    ECCO il problema....
    Valorizzo le variabili con la funzione extract() passandogli un array associativo membro della classe template...
    la valorizzazione avviene in due passi:
    prima carico le variabili in un array associativo con la funzione prvata _addVar(), poi il meotdo _registerVars() esegue extract() su tutte le variabili registrate nell'array.

    Ma le variabili non vengono affatto valorizzate... ed il template resta vuoto buck

    e non capisco assolutamente il perchè... ho pensato a problemi di visibilità delle variabli ma non ne sono venuto a capo...

    tenete presente che la classe di template esegue un include() sul template compilato

    inoltre un template compilato consiste in un file che al posto di tags
    Codice PHP:
    {$nome_modulo
    ha codice del tipo
    Codice PHP:
    echo $nome_modulo 

    scusate se il post è un po lunghetto ma ho cercato di farvi capire il contesto... se cè bisogno vi posto il codice completo..

    grazie mille ^^
    Digital Riot!
    http://fatmatt.wordpress.com
    -Chi è disposto a rinunciare alla propria libertà in cambio di sicurezza, non merita ne libertà ne sicurezza- Benjamin Franklin

  2. #2
    Prova a postare un esempio semplificato del codice che stai utilizzando.

  3. #3
    ciao ^^
    ho risolto... mi hanno fatto notare che extract() alloca variabili locali, e poichè la utilizzavo in una funzione separata, quelle variabili non esistevano a scoping superiore. devo stare più attento con la documentazione


    cmq grazie della considerazione... non rispondeva nessuno
    Digital Riot!
    http://fatmatt.wordpress.com
    -Chi è disposto a rinunciare alla propria libertà in cambio di sicurezza, non merita ne libertà ne sicurezza- Benjamin Franklin

  4. #4
    Utente di HTML.it L'avatar di lnessuno
    Registrato dal
    Feb 2002
    Messaggi
    2,732
    beh scrivere una sorta di framework mvc, seppur minimale, non è certo cosa da tutti... complimenti per il coraggio e la scelta, io quel genere di framework mi limito ad utilizzarlo

  5. #5
    in effetti non è molto facile

    secondo me ha molti lati positivi... ti fa entrare dentro il linguaggio, toccando dei temi che magari altrimenti non avresti modo di affrontare... decisamente didattico
    in certi momenti è da strapparsi i capelli... anche perchè non sono esattamente un guru del php

    Digital Riot!
    http://fatmatt.wordpress.com
    -Chi è disposto a rinunciare alla propria libertà in cambio di sicurezza, non merita ne libertà ne sicurezza- Benjamin Franklin

  6. #6
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    Originariamente inviato da fatmatt

    in certi momenti è da strapparsi i capelli... anche perchè non sono esattamente un guru del php

    e guru non ci si diventa usando sempre le cose già fatte

    solo una considerazione.. beato te che hai tempo per svilupparla, il sito che la utilizzerà non è sicuramente un sito che deve essere pronto per ieri

    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  7. #7
    Beh alla fine questo mi sembra una specie di Template Engine sostituendo la parola tra graffe con un valore.

    Penso sia carino fare una struttura del genere,tipo:
    -modello(classe legata al db Sql o Xml che sia)
    -controller(insieme di funzioni che dialogano con il modello)
    -vista(template dove puoi mettere del codice php usando variabili del controller, tipo:
    [Controller].php
    Codice PHP:
    $ciao "ciao";
    $c->view(); 
    [VISTA].php
    Codice PHP:


    <?php=$ciao?></p>
    Evitando così di sostituire tutti i valori con il proprio tag a manina.
    Si potrebbe emulare una specie di Rails(Moltooooo semplificato ovvio).
    Sistemi di allarme, telecamere, autoradio, video proiettori e altri prodotti tecnologici: fedom.it

  8. #8
    scusate il ritardo^^

    Beh alla fine questo mi sembra una specie di Template Engine sostituendo la parola tra graffe con un valore.
    si effettivamente la parte che mi dava problemi era proprio il metodo display di un template engine (sempre mooolto semplice )

    e per il resto funziona all'incirca come hai descritto , la vista è affidatra al template, i dati vengono recuperati dai vari moduli (questo permette di dividere il codice e scrivere moduli personalizzati) dopodichè il controller mete tutto insieme .

    Il mio obiettivo è di inserire delle classi per il controllo dell'input e dell'output, per cercare di limitare i danni di XSS e Sql-Injections, che ultimamente mi sembrano un argomento caldo.
    insomma mi concentrerò sulla validazione dei dati

    solo una considerazione.. beato te che hai tempo per svilupparla, il sito che la utilizzerà non è sicuramente un sito che deve essere pronto per ieri
    il tempo lo trovo essenzialmente perchè sono ancora uno studente primo anno di ingegneria.... anche se tra qualche giorno dovrò lasciar perdere le cose motivo "esami"
    Digital Riot!
    http://fatmatt.wordpress.com
    -Chi è disposto a rinunciare alla propria libertà in cambio di sicurezza, non merita ne libertà ne sicurezza- Benjamin Franklin

  9. #9
    Originariamente inviato da fatmatt
    e per il resto funziona all'incirca come hai descritto , la vista è affidatra al template, i dati vengono recuperati dai vari moduli (questo permette di dividere il codice e scrivere moduli personalizzati) dopodichè il controller mete tutto insieme .
    Nelle due righe di codice che ho portato, non c'è un replace, ma codice PHP, in questo modo puoi creare cicli nei template con variabili già inizializzate nel controller:
    Controller.php
    Codice PHP:
    $id 4//variabile di prova
    $ciao $prodotti->find($id); //dalla tabella prodotti
    $c->view(); 
    Vista.php
    Codice PHP:
     <?php while($desc $db->load($ciao)): ?>
           <td><?php echo $desc['nome'?></td>
    <?php endwhile; ?>
    Cioè io nella vista metterei solamente variabili da stampare a video, in questo modo non fai tanti replace se hai ne hai molte e potresti crearti una variabile comprendente un array da usare nelle viste, tipo $_EXTRACT, quindi $_EXTRACT['ciao'] = $ciao; e renderla globale nella vista dal controller, con una funzione automatica.
    Così, permane lo stesso la differenza che c'è tra un controller e una vista.
    Il mio obiettivo è di inserire delle classi per il controllo dell'input e dell'output, per cercare di limitare i danni di XSS e Sql-Injections, che ultimamente mi sembrano un argomento caldo.
    insomma mi concentrerò sulla validazione dei dati
    Fai bene, ricordati il captcha, virgolette varie e caratteri html.

    Ciao

    Alberto
    Sistemi di allarme, telecamere, autoradio, video proiettori e altri prodotti tecnologici: fedom.it

  10. #10
    io ho fatto un ragionamento del genere.... forse ti farà pensare che mi sono complicato la vita (spero di non dire scempiaggini):

    per quel che riguarda i cicli ho risolto così:

    Codice PHP:
    {section name="books" loop="var"}
    <
    tr><td>{$var["autore"]}</td><td>{$var["titolo"]}</td></tr>
    {/
    section
    fa si che venga compilato un nuovo file contenente il codice

    Codice PHP:
    <?php foreach($nome as $var): ?>
    <tr><td><?php echo $var["autore"?></td><td><?php echo $var["titolo"?></td></tr>
    <?php endforeach; ?>
    ho evitato il "=" per evitare problemi con i tag abbreviati che dipendono (sen non erro) dalla configurazione di php ed ho inserito echo

    ma ora che mi ci fai pensare , l'uso intensivo di sostituzioni potrebbe appesantire il codice
    ma d'altra parte, ho pensato che evitare di scrivere direttamente del codice php in un template, da un margine (anche se minimo) di riusabilità del template stesso.


    L'dea dell'array globale accessibile dall'esterno nella classe view mi sembra ottima, anche per dare più libertà a chi usa le classi

    grazie dei consigli ^^
    Digital Riot!
    http://fatmatt.wordpress.com
    -Chi è disposto a rinunciare alla propria libertà in cambio di sicurezza, non merita ne libertà ne sicurezza- Benjamin Franklin

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.