2010-06-02 19 views
13

Realizzo molto ASP.NET MVC 2, ma sto affrontando un piccolo progetto al lavoro e deve essere eseguito in PHP.Post modulo PHP, mappatura automatica a un oggetto (rilegatura modello)

C'è qualcosa di integrato in PHP per eseguire il binding del modello, mappando i campi del modulo di posta in una classe? Alcuni del mio codice PHP attualmente si presenta così:

class EntryForm 
{ 
    public $FirstName = ""; 
    public $LastName = ""; 
} 

    $EntryForm = new EntryForm(); 

if ($_POST && $_POST["Submit"] == "Submit") 
{ 
    $EntryForm->FirstName = trim($_POST["FirstName"]); 
    $EntryForm->LastName = trim($_POST["LastName"]); 
} 

C'è qualcosa built-in ad un PHP tipica installazione che farebbe tale mappatura come si vorrebbe trovare in ASP.NET MVC, o richiede un ulteriore struttura?

risposta

10

Non nativo, ma una soluzione migliore che ti permette utilizzando le proprie classi o una classe standard ...

function populateWithPost ($obj = NULL) 
{ 
    if(is_object($obj)) { 

    } else { 
     $obj = new StdClass(); 
    } 

    foreach ($_POST as $var => $value) { 
     $obj->$var = trim($value); //here you can add a filter, like htmlentities ... 
    } 

    return $obj; 
} 

E poi si può utilizzare come:

class EntryForm 
{ 
    public $FirstName = ""; 
    public $LastName = ""; 
} 

$entry = populateWithPost(new EntryForm()); 

o

$obj = populateWithPost(); 
+0

Grazie! Un piccolo cambiamento e ha funzionato perfettamente. foreach ($ _POST come $ chiave => valore $) { $ obj -> $ key = trim (valore $); } –

+0

Siamo spiacenti! Grazie, lo aggiusto! :) – Mahomedalid

+0

Soluzione geniale !!! Mi ha aiutato molto! –

1

Integrato in PHP? No.

La risposta quadro si è accennare a dove avrete bisogno di andare per questo (dopo tutto, ASP.NET è un framework troppo)

+1

vecchio post, lo so, ma solo chiarendo .... ASP.NET non è un quadro. .NET è un framework. –

+0

@devlincarnate ASP.NET __ è davvero un framework__. Citando dal sito Web ufficiale di ASP.NET, "ASP.NET è un framework Web open source per la creazione di app Web moderne ..." [Sito Web ASP.NET] (https://www.asp.net/) –

0

Niente integrato in PHP per questo. Ma facile da implementare nella tua classe EntryForm. È possibile aggiungere public function populate($post) a EntryForm e passargli la variabile $ _POST. Passerebbe in loop e se l'attributo class esiste, impostalo. In effetti, potresti creare una classe astratta che implementa populate() ed estenderla con il tuo EntryForm o qualsiasi altro modulo che desideri. Dovrai anche disinfettare l'input, ovviamente.

1

Quello che stai cercando è un livello ORM (Object Relationship Mapping). PHP ha un paio, uno dei quali è Doctrine. Detto questo, la risposta di mahomedalidp è molto utile per fare le cose in PHP.

+0

sì, penso che uno strato ORM completo sia la soluzione migliore. – Mahomedalid