Passare da un framework a un no-framework [chiuso]


89

Sviluppo in PHP da circa 8 anni come hobby. Nel 2009 ho acquisito codeigniter e da allora non sono riuscito a sviluppare un solo progetto.

Trovo che mi rallenti cercando di capire come modificarlo per funzionare nel modo desiderato, quando se lavorassi in PHP puro, lo saprei o sarei in grado di trovare rapidamente uno snippet per.

Ho provato CodeIgniter, Kohana e Symfony. Adoro la facilità d'uso (e ho anche iniziato a usare dottrine come ORM che ha velocizzato enormemente il mio lavoro sul database), ma trovo che i progetti mi stiano impiegando 3-4 volte il tempo necessario con PHP puro. Mi annoio e mi sento frustrato quando non riesco a trovare una soluzione a un problema che ho già risolto in PHP puro.

Qualcuno è tornato dall'uso dei framework a un approccio no-framework. Esiste qualcosa di simile a un framework di sicurezza di base (prevenire XSS, filtrare i dati pubblicati, fornire una funzione di pulizia da utilizzare con i database)? Penso che qualcosa del genere mi avvantaggerebbe molto di più di un quadro completo. Penso che imparare a lavorare con i framework mi abbia insegnato molto, ma sarei più felice di lavorare con il mio codice.


5
mi piacerebbe sapere di più sul motivo per cui hai detto che l'utilizzo di framework richiede 3-4 volte del tempo rispetto a no-framework .. ti dispiace elaborare di più su questo?
Lukman

7
Uno dei vantaggi di CI, o di qualsiasi framework, è che ti obbliga a creare un modello di progettazione più facile da mantenere per gli sviluppatori non abituati al tuo particolare stile di sviluppo. Inoltre, in ambienti più grandi, separare le visualizzazioni dalla logica è essenziale in modo che i guru CSS possano fare le loro cose senza calpestare gli sviluppatori.
Kyle Noland

1
Ottima domanda, se mai avessi una scelta, uso PHP puro. Ma la maggior parte delle volte, le persone per cui lavoro vogliono che utilizzi un framework, quindi mi limito a far pagare loro le ore extra :) Mi sento come se il mio codice fosse leggibile, ben organizzato e stabile. Forse temono di doverti tenere a bordo se si verifica un disastro e tutto il codice è in uno stato "tuo-quadro-personalizzato-che-nessun-altro-può-leggere".
SSH Questo

Risposte:


101

Le versioni attuali di PHP5 includono gran parte del framework di sicurezza che stai cercando come parte della libreria standard.

Se accetti HTML come input, ti consiglio di prendere HTML Purifier e chiamarlo tramite una riga FILTER_CALLBACK nella configurazione filter_input_array. Il suo approccio basato sulla whitelist alla sicurezza dell'input costituisce un'ottima (e molto potente) prima linea di difesa contro XSS.

Per quanto ne so, PHP non è dotato di un meccanismo per la protezione dalla contraffazione delle richieste cross-site , ma sono sicuro che Google può aiutarti con quello. I Cheatsheets di sicurezza OWASP includono una sezione se desideri implementare la tua protezione.

Per curiosità, ho deciso di iniziare a guardare anche i componenti standalone ed ecco cosa ho trovato finora:

Modelli:

Cose che non ho ancora esaminato correttamente:


Grazie, tutti ottimi consigli e inizierò a esaminarli ora!
Alex C

4
Scambia Smarty con Dwoo se hai bisogno di un motore di modelli. Per quanto riguarda le funzionalità è quasi identico a Smarty ma non fonde le CPU.
Phil Sturgeon

pear.php.net/package/Net_URL_Mapper è un dispatcher di percorsi.
cweiske

4
Se i framework ti rallentano, evita i motori di template, Smarty in particolare, come la peste. Hanno buone intenzioni ma creano solo un modo nuovo e non intuitivo di fare qualcosa che PHP già fa.
Night Owl

Dipende da ciò che stai cercando di realizzare e dal motivo per cui il framework ti rallenta.
ssokolow

10

Non credo nei framework ... ho lavorato in molti di essi.

Motivi per odiare i framework MVC:

1) Code bloat, acquisto classi premium che mi aiutano nello sviluppo. Come classi di moduli o classi SQL.

2) Credo che i framework MVC non siano facilmente trasportabili soprattutto quando si utilizzano i gestori delle dipendenze.

3) Credo che tu possa effettivamente scrivere più codice con un framework MVC quindi se dovessi usare un boilerplate con un sacco di classi utili che gestiscono l'autenticazione, ecc.

4) La maggior parte dei framework soddisfa anche solo uno o due database in modo nativo.

Suggerirei di trovare un framework di moduli con autenticazione e editor di testo e un framework sql come madoo + una classe di posta elettronica ...

Il 90% della tua domanda è sempre form, sql e ajax CLASSES - il resto può essere acquisito solo quando necessario

Sono un minimalista e combatto con l'idea di avere codice nella mia applicazione che non fa nulla ... nel caso in cui ne avessi bisogno non funziona per me.


Per quanto riguarda la dichiarazione "acquisto classi premium": da dove si acquistano tali classi e per quali scopi? Grazie.
dotancohen

Sono d'accordo. Inoltre c'è un notevole successo in termini di prestazioni con molti framework.
Developerbmw

8

Con tutta questa esperienza alle spalle, devi avere il tuo set di librerie preferite, selezionarle manualmente e inventare il tuo semplice framework. Framework o no framework (e quale a quello) dipende dal tipo di progetto a portata di mano, nessun guanto va bene per tutti. Quindi suggerirei caldamente che se ritieni che i framework esistenti ti stiano rallentando, spendi un po 'di tempo e trova un framework che funzioni secondo le tue esigenze.


8

Sulla base della tua affermazione che stai usando PHP come hobby, così come della tua dichiarazione del profilo "Ci arrivo lentamente", questo sembra un problema di curva di apprendimento. Non sembri avere la profondità e l'ampiezza di esperienza per a) capire come lavorare all'interno della struttura che il framework impone eb) quindi non sei in grado di beneficiare delle efficienze che il framework consente.

Ti esorto a mantenerlo. Torna all'inizio con i tutorial video. Trova e leggi il codice di altre persone finché non lo capisci. Crea i tuoi progetti dal basso verso l'alto: inizia in modo semplice e aggiungi funzionalità. Segui i forum, cercando di rispondere tu stesso alle domande prima di leggere le risposte.

Ho programmato professionalmente per quasi 20 anni, su una varietà di piattaforme, e mi ci è voluto ancora un po 'per familiarizzare con CI. Ma ora che lo sono, non tornerei al PHP puro (per i miei progetti) a meno che non avessi un sito di dimensioni sufficienti da esporre problemi di prestazioni quantificabili (si pensi a Twitter).


Sono ancora al limite che mi piacciano o meno anche i framework. Capisco decisamente il punto dell'OP, ma vedo anche il tuo ... imparare un framework è come imparare una lingua completamente nuova. Devi entrare nel modo in cui il framework fa le cose. Un'altra cosa con cui faccio fatica, tuttavia, è se la mia filosofia di come le cose dovrebbero essere fatte è diversa da quella del framework. Sto ancora cercando di trovarne uno adatto a me. (Non vedo l'ora di .NET MVC3)
mpen

Al momento non conosco altri framework, quindi non posso parlare con alcuna generalità. Ma l'utilizzo di un framework non è una proposta tutto o niente. Ad esempio, trovo le librerie di cache di CI (pagina, database) insufficienti e non facilmente scalabili. Quindi uso una libreria cache di terze parti (quella di Phil Sturgeon) e ne sono abbastanza soddisfatto.
coolgeek

Un altro vantaggio significativo nell'aderire ad esso è che rende relativamente facile apprendere successivamente altri framework. Questo è il motivo per cui si vedono spesso elenchi di lavoro che specificano un framework particolare (ad esempio CI), ma che verrà presa in considerazione l'esperienza con framework simili (ad esempio Zend o Symfony).
coolgeek

2

Zend Framework è davvero eccellente per questo. Puoi usarne quanto vuoi. È tutto codificato in php e open source, quindi puoi semplicemente hackerarlo e renderlo tuo. Le diverse componenti non dipendono l'una dall'altra quanto in altri quadri.

Potresti costruirti un semplice framework usando alcuni componenti di Zend senza problemi.

Dai un'occhiata!


3
Sta cercando di allontanarsi da un quadro.
WarmWaffles

1
@WarmWaffles. Ecco perché ho parlato dell'utilizzo di parti di ZF. Sicuramente non ti aspetti che il ragazzo reinventa la ruota per tutto.
Iznogood

2
Iznogood ha un ottimo punto. ZF è più di un semplice framework. Ho trovato i pacchetti estremamente utili per svolgere molte attività comuni e non c'è nulla al riguardo che ti costringa a utilizzare i loro modelli MVC oi loro metodi di accesso al DB o qualsiasi altra cosa. Naturalmente, potresti anche andare con i moduli Pear.
Bob Baddeley

2
È una libreria sì che sfoggia anche un quadro. Tuttavia sta cercando qualcosa di facile da usare e l'ultima volta che ho controllato lo spazio dei nomi di Zend è disordinato e difficile da digitare. @Bob_Baddeley PEAR è un buon suggerimento
WarmWaffles

@WarmWaffles Bene a ciascuno il suo immagino. Forse potresti ricontrollare Zend a 1.10.x ora e piuttosto diverso quindi dire 1.8.
Iznogood

2

So esattamente come ti senti. Ho iniziato 4 ~ 5 anni fa in PHP (vengo da Delphi, lol) e ho iniziato in puro php. Quello che avevo dietro era un "pannello CMS simile" che leggeva tutti i campi delle tabelle e creava il modulo. Dopo un po 'di tempo ho raggiunto in qualche modo la conoscenza di PHP Frameworks, ho provato CakePHP per primo e non mi è piaciuto, dopo, sono entrato in Yii che a mio parere è abbastanza intuitivo e facile da usare (con il suo generatore Gii è praticamente fantastico). Ho provato Symfony, ZF2, Laravel, Yii2-Beta e alcuni framework per RAD, ma ancora non mi sentivo abbastanza veloce come prima dei framework.

È successo che ho sviluppato il mio framework (è stato naturale, non esattamente che un giorno mi sono svegliato e ho detto "Creerò un nuovo framework", è successo con il tempo). So che è una cattiva cattiva pratica e la mossa di "reinvenzione della ruota", MA, ora sviluppo i miei progetti molto più velocemente (più del solo PHP).

Dato che il suo codice è un MESS totale, ho iniziato circa un mese fa a riformulare il mio framework, ora usa composer, segue regole comuni che esistono tra i framework php, è MVC.

Perché sto riformulando? Perché se qualcuno ha bisogno di riparare un mio progetto, non sarà una cosa da un altro mondo.

Quindi ti capisco.

Il mio consiglio è, prepara i tuoi strumenti (chiamalo framework, app preimpostata o come lo chiamano le persone) e usali nel modo in cui ti senti meglio, ma segui comunque alcune regole comuni (come MVC, cose "facili da modulare" che si può sostituire in caso di rottura.


1

Per la sicurezza di base, utilizzo un metodo di filtro personalizzato che racchiude le mie superglobali . La sua sintassi ha bisogno di un po 'di tempo per abituarsi, ma è più semplice dell'API PHP filter_var () e non ti consente di evitare la disinfezione:

 $_GET->text("inputvar") or $_POST->name["field"]

Permetteva anche l'escape $ _REQUEST-> sql () inline. Ma per il lavoro del database continua a utilizzare SQL parametrizzato o il tuo DAL / ORM preferito.


Questa è sicuramente una soluzione intelligente, ma non sono sicuro del motivo per cui pensi che l'API del filtro sia ingombrante. Se non altro, penso che filter_input_array () sia eccellente. (Principalmente perché rende semplice definire tutti gli input per un determinato tipo di richiesta in un punto in modo ragionevolmente dichiarativo. Non sottovalutare mai il vantaggio di quel genere di cose.)
ssokolow

@ssokolow: In effetti, filter_input_array () è utile per farlo in un colpo solo. Tuttavia c'è già troppa flessibilità nelle funzioni filter_ * e troppi parametri non le soddisfano. Ecco perché penso che le persone lo stiano evitando (anche se tecnicamente è una buona soluzione).
mario

Forse. Penso che parte del problema sia che, oltre ad essere un recente arrivo in un mondo in cui molte persone hanno ancora libri PHP4 sui loro scaffali, è sotto-pubblicizzato, i documenti ufficiali non sono abbastanza chiari e i documenti di W3Schools che tendono a condividere i migliori risultati di Google non sono abbastanza completi.
ssokolow

1

Ho fatto uno studio di un giorno su ToroPHP e l' ho trovato abbastanza carino. È un framework minimalista destinato alle applicazioni RESTful. Ciò consente di mantenere modulare il codice lato server, senza dover affrontare il sovraccarico di alcun framework.


1

Non so cosa ti preoccupi ma codeigniter è un ottimo framework, ha una bella documentazione e poiché molte persone usano codeigniter troverai tutto l'aiuto nella sua documentazione, o forum o su stackoverflow. Ho lavorato su molti framework ( Codeigniter, CakePHP, Zend, Spring 3.0, Ruby on Rails), ma devo dire che codeigniter ha la migliore documentazione. Ci sono molte cose in codeigiter che vengono gestite automaticamente e non devi preoccuparti della sicurezza. Lavorare sul core PHP è come reinventare la ruota. Bene, la cosa più importante è che passare da un core a un framework richiederà molto del tuo sforzo una volta che ti sarai abituato, inizierai ad amarlo.Anche Ruby on rails è anche un ottimo framework una volta che conosci i suoi dettagli che puoi hanno doppia velocità.


2
Sono passati poco più di due anni da quando l'ho pubblicato e in realtà ho lavorato con PHP puro per un po ', ma da allora sono tornato a PHP: hai esattamente ragione, è incredibilmente facile da usare. La mia attuale configurazione preferita è CI, phpActiveRecord per i database e Twig per i modelli.
Alex C

Sì, phpActiveRecord sembra carino. Hai mai provato Laravel però? ( laravel.com ) Penso che troverai che ha il meglio di CI, phpActiveRecord e Twig tutti integrati per impostazione predefinita. Sono stato io stesso uno sviluppatore di CakePHP, ma ultimamente guardo attentamente Laravel.
Simon East
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.