Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883

    esempio di implementazione mvc

    Ciao a tutti
    sto provado, per motivi di studio, a fare un'implementazione semplice del paradigma mvc (so che esistono zend framework, ecc...), volevo sapere se sono sulla strada giusta

    il progetto sarà composto dalle seguente cartelle:
    dir principale: nome_progetto
    sottodirectory:
    bean
    action
    dao
    css
    js
    nella directory principale ci saranno tutte le view

    Supponendo di vole implementare una funzionalità che permetta di salvare i dati di una form di registrazione, le classi che dovrei creare sarebbero

    View: signup_view.php
    Controller: action/signup_action.php
    Model: bean/signup_bean.php
    Dao: dao/signup_dao.php

    La servlet istanzia un model (signupi_bean.php) e chiama la classe (signup_dao.php) che si occuperà di salvare i dati sul db tramite un metodo save_signup.php
    I metodi in comune, tipo la connessione al db vengono messi in una classe e tutti i dao estenderanno quella classe

    Riassumendo:
    View -> chiama la Servlet -> istanzia e popola il Model
    istanzia il Dao e chiama il metodo che interagiraà con il db
    ritorna ad una view

    In particolare vorrei che mi controllasse la correttezza della classe: signup_action.php

    Vediamo il codice
    db_config.php
    Codice PHP:
    <?php 
    // web

    $mysqli = new mysqli($mysql_server$mysql_user$mysql_password$db_name);

    if(
    mysqli_connect_errno()) {
        echo 
    "Connection Failed: " mysqli_connect_errno();
        exit();
    }
    ?>
    signup_view.php
    Una form in html che raccoglie i campi: nome, cognome, email

    signup_bean.php
    Codice PHP:
    <?
    class utente_bean
    {
        private 
    $id;
        private 
    $email;
        private 
    $cognome;
        private 
    $nome;

        
    //elenco di tutti i metodi get e set
        
    function get_cognome()    {
            return 
    $this->cognome
        }
        
        function 
    set_cognome($cognome)    {
            return 
    $this->cognome $cognome
        }
        
        function 
    get_nome()    {
            return 
    $this->nome
        }    
        
        function 
    set_nome($nome)    {
            return 
    $this->nome $nome
        }
        
        
    ecc..

    ?>
    signup_dao.php
    Codice PHP:
    <?
    class signup_dao {
        var 
    $conn;

        function 
    signup_dao(&$conn) {
            
    $this->conn =& $conn;
        }

        function 
    save(&$signup_bean) {
            if (
    $signup_bean->id == 0) {
                
    $this->insert($signup_bean);
            } else {
                
    $this->update($signup_bean);
            }
        }

        function 
    delete(&$signup_bean) {
        }

        function 
    insert(&$signup_bean) {
            
    #generate id
            #insert record into db
            #set id on signup_bean
            
    $query "INSERT INTO utente (nome,cognome,email)
                    VALUES (?, ?, ?)"
    ;

            if (
    $stmt $mysqli->prepare($query)) {

                
    $stmt->bind_param("sss"$signup_bean-get_nome(), $signup_bean-get_cognome(), $signup_bean-get_email());

                
    $stmt -> execute();

                
    $stmt -> close();
            }
        }

        function 
    update(&$signup_bean) {

        }
    }
    ?>
    signup_action.php
    Codice PHP:
    <?php

    require_once("../db_config.php");
    require_once(
    '../signup_bean.php');
    require_once(
    '../signup_dao.php');

    $nome $_POST['nome'];
    $cognome $_POST['cognome'];
    $email $_POST['email'];

    $signup_bean = new signup_bean();
    $signup_bean>set_nome(nome);
    $signup_bean>set_cognome($cognome);
    $signup_bean>set_email($email);

    $signup_bean = new signup_dao($mysqli);
    $signup_dao>save($signup_bean);
    $mysqli->close();
        
    $message "Utente registrato";
    $_SESSION['messaggio'] = $message;

    header('Location: ../index.php?page=msg');



    ?>
    Che ne dite?

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    Nessun suggerimento ?

  3. #3
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,258
    L'unica cosa è che il tuo controller comunica direttamente con il DAO.
    L'action dovrebbe dire al model semplicemente SALVA(), è poi la classe model che si deve arrangiare a salvare i dati come vuole.

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    ok però ho un problema nell'uso del codice, in particolare nel dao, questo metodo:


    quando vado ad usare $conn

    if ($stmt = $conn->prepare($query)) {

    mi dice che non riesce a capire cos'è il metodo prepare, ho analizzato il problema e praticamente in questo metodo:
    function signup_dao(&$conn) {
    $this->conn =&$conn;
    }


    non funziona l'assegnazione, cioè la variabile
    &$conn
    è un oggetto di tipo connessione al db
    ma se faccio l'echo di $this->conn
    non è più un oggetto di tipo connessione al db

  5. #5
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,258
    Premessa:
    Attento che mi pare che tu stia programmando ancora in PHP4, con le classi sono passato direttamente a PHP5.
    Ma cmq.

    Per accedere a "var $conn" interna alla classe la devi definire come "$this->conn"
    Quindi diventa

    if ($stmt = $this->conn->prepare($query)) {

    In più il passaggio di un oggetto per riferimento va fatto così
    Codice PHP:
        function signup_dao(&$conn) { 
            
    $this->conn =$conn
        } 

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    Grazie dell'aiuto Uranio
    mi potresti dire cosa intendi con
    "Attento che mi pare che tu stia programmando ancora in PHP4, con le classi sono passato direttamente a PHP5."
    dove lo hai notato in questo mio codice?

  7. #7
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,258
    Era un consiglio, nel senso che se vuoi usare le classi è meglio passare a PHP5 che è "più" OOP.
    Ho immaginato che tu usassi PHP4 da questo codice
    Codice PHP:
    <? 
    class signup_dao 
        var 
    $conn

    ....
    etc....
    In PHP5 a meno di non modificare la configurazione devi usare "<?PHP"
    E le variabili si identificano con con private/public etc..

  8. #8
    manco in Java ormai si usano più i Beans, li devi usare te? cambia nome
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    Santino83_02 come vengono chiamati addesso i beans, cioè le classi (di solito corrispondenti ad una tabella sul db) che contengono solo gli attributi ed i metodi get/set?

  10. #10
    mah dipende, ad esempio come hai scritto te ma senza "_bean"... cmq puoi chiamarle come ti pare, la mia era una mezza battuta perchè mi hai fatto ricordare le EJB ormai cadute in disuso nelle moderne/comuni app java.
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

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 © 2024 vBulletin Solutions, Inc. All rights reserved.