Coding in 'core php' e separazione logica dalla presentazione

0

Quali sono i vari modi di realizzare questo? Qualcuno può guidarmi per favore?

Devo codificare un sito web per un amico (designer). L'amico vuole che io usi il core php e non qualche framework come il codeigniter (qualcosa che mi piace e mi piace molto!).

Ho dato un'occhiata a un paio di roll your own MVC frameworks guide, ma non sono sicuro se questo è l'approccio ideale. Dal momento che qualsiasi soluzione che potrei trovare potrebbe avere vari bug / problemi di sicurezza. Il mio obiettivo è quello di utilizzare un semplice php, senza l'ausilio di framework di terze parti, per codificare un sito, in cui la logica è separata dalla vista.

Grazie

    
posta gyaani_guy 16.07.2012 - 14:58
fonte

4 risposte

1

Il metodo semplice è quello di mettere tutto il tuo html in una cartella di visualizzazione separata, e basta fare un

include $site_path . 'views/' . $myfilename;

alla fine di ogni file di codice.

La robustezza di una struttura che imposti dipende in realtà dalla complessità del progetto.

    
risposta data 16.07.2012 - 15:54
fonte
1

Posso capire che potresti voler evitare l'uso di qualche tipo di framework di terze parti per motivi di continuità e / o dipendenza, ma ciò ti lascia ancora con i principi di progettazione da seguire. Alla fine consiglierei al tuo amico che potrebbe essere molto utile per lui prendere in considerazione un framework che è ben supportato e con cui sei in grado di lavorare. Probabilmente ridurrà i tempi di sviluppo e catturerà molte falle nella sicurezza di cui non hai mai sentito parlare.

In caso contrario, la mia ipotesi è che è necessario fare un buon progetto generale prima di iniziare la codifica per assicurarsi di avere almeno una buona panoramica di come si desidera impostare le relazioni tra gli spazi dei nomi e le classi in quegli spazi dei nomi . (non necessariamente in UML, potrebbe essere solo un documento di testo) Sebbene sia quasi abusato in questo senso, MVC è un ottimo modello per separare la logica core dalla presentazione e dalla gestione degli input (incluso il lato sicurezza della gestione degli input, come SQL injection e il simile).

Come in ogni codifica, la sicurezza è per lo più di progettazione seguita da buone pratiche di codifica. Assicurati di avere una buona idea su cosa dovrebbe fare il sito e, cosa ancora più importante, non dovrebbe essere in grado di impostare i vincoli su ciò che il sistema è in grado e su cosa gli utenti del sito sono autorizzati a fare.

A proposito, non ci sono quadri che significano che non puoi usare motori di template come smarty e simili? Possono aiutarti a fare un sacco di cose per te e migliorare la tua sicurezza per te.

    
risposta data 16.07.2012 - 16:16
fonte
0

La prima domanda è: quanto è grande un progetto? Dici che stai codificando un "sito web" - ma non quali caratteristiche vuoi. Un "sito web" può essere qualsiasi cosa, da una singola pagina, a una gestione dei contenuti personalizzata (come una galleria di immagini), fino a un sito di e-commerce e oltre. L'ambito del progetto avrà un impatto decisivo sulla risposta alla tua domanda.

La seconda domanda: perché il tuo amico non vuole usare framework di terze parti? O è un quadro specifico? In generale, i framework sono disapprovati come "codice di terze parti non attendibili" - se questo è il caso, può essere d'aiuto qualche istruzione su dove viene utilizzato questo framework e su come è gestito. Un altro problema è l'idea di strutture "gonfie" - l'idea che siano piene di funzionalità che non saranno mai chiamate. Una parte di questo è affrontata nella domanda di cui sopra, e parte di questa viene affrontata selezionando un framework modulare: il codice viene incluso solo quando ne hai bisogno, riducendo "bloat". L'ultimo è la complessità: le persone possono vedere le strutture come inutilmente complicate - c'è una curva di apprendimento durante il mantenimento o l'estensione. Quello che non realizzano è che la maggior parte delle strutture sono sviluppate in comunità (o almeno prendono molta direzione dalla comunità), e parte di ciò che la comunità vuole è la semplicità - quindi queste strutture vengono ridotte nel tempo.

Quindi, questo dovrebbe affrontare i negativi percepiti dei framework - ci sono anche dei lati positivi: i framework sviluppati dalla community tendono ad essere più sicuri, semplicemente perché un pubblico più ampio ha rivisto e aggiornato codice non sicuro. Le strutture homegrown non si avvicinano allo stesso tipo di auditing. Allo stesso modo, i framework nati in casa possono facilmente diventare un codice spaghetti complesso, anche in questo caso, a causa di questa mancanza di auditing più ampio.

Tutto ciò ha detto - ci sono momenti in cui un framework non è necessario: un sito relativamente semplice (diciamo ovunque fino a una galleria di immagini o un semplice blog) potrebbe essere scritto senza un framework di terze parti. PHP Objects, Patterns and Practices illustra vari pattern che possono essere utilizzati per soluzioni "non-framework", come i controller di pagina e così via.

    
risposta data 17.07.2012 - 01:24
fonte
-1

La risposta breve è: sempre usa un framework. Non provare a scrivere da solo (a meno che non lo fai per l'apprendimento).

La risposta lunga è più complessa.

Dalla mia esperienza personale, ho visto che ci sono situazioni in cui semplicemente non hai scelta, specialmente quando devi lavorare con persone che non hanno familiarità con OOP.

Il mio suggerimento è: specialmente se stai partendo da zero, prova a convincere il tuo amico ad usare CodeIgniter. Dopotutto, non avrà bisogno di essere un guru OOP o MVC per capire quale vista è caricata dal controller x.

Solo se non riesci a convincerlo, e se il progetto è molto semplice, scrivi il tuo mini-framework, ma non provare a implementare un pattern MVC completo. Sarebbe la stessa cosa che usare CodeIgniter, ma al posto dell'originale avresti una brutta copia.

Ecco i miei suggerimenti:

Crea un file "main.php" come singolo punto di accesso al tuo framework, con la dichiarazione di autoloading, l'inizializzazione della sessione ecc.

Crea una directory 'classes' per mantenere tutte le tue logiche separate.

Crea una classe View (la cosa più semplice che puoi fare è includere il file di visualizzazione ed estrarre la matrice di dati da usare all'interno della vista):

<?php
class View {

    protected $view_name, $data;

    public function __construct($view_name, $data = array()) {
        $this->view_name = $view_name;
        $this->data = $data;
    }

    //Displays view content
    public function render(){
        //Extracts vars to current view scope
        extract($this->data);

        //Includes contents
        include $this->view_name;
    }

}

Crea una libreria di convalida di input.

Quindi, all'interno delle tue pagine, includi "main.php" e avrai accesso a tutte le tue classi e visualizzazioni.

<?php include_once 'main.php';
$view = new View('view.php', array('var_name' => 'value'));
$view->render();

Sto scrivendo un framework molto semplice che è costruito più o meno su questo schema. L'ho scritto esattamente per affrontare questo tipo di situazioni. Dai un'occhiata se hai bisogno di ispirazione.

    
risposta data 17.07.2012 - 17:35
fonte

Leggi altre domande sui tag