Beralih dari kerangka kerja ke tanpa kerangka [ditutup]


89

Saya telah mengembangkan PHP selama sekitar 8 tahun sebagai hobi. Pada tahun 2009, saya mengambil codeigniter dan sejak itu saya tidak berhasil mengembangkan satu proyek pun.

Saya merasa itu memperlambat saya mencoba mencari cara untuk memodifikasinya agar berfungsi seperti yang saya inginkan, ketika jika saya bekerja di PHP murni, saya akan tahu, atau saya akan dapat dengan cepat menemukan potongan untuk.

Saya sudah mencoba CodeIgniter, Kohana dan Symfony. Saya suka kemudahan penggunaan (dan saya juga mulai menggunakan doktrin sebagai ORM yang secara besar-besaran mempercepat kerja database saya), tetapi saya menemukan proyek memakan waktu 3-4 kali lipat jumlah waktu yang dibutuhkan dalam PHP murni. Saya bosan dan frustrasi ketika saya tidak dapat menemukan solusi untuk masalah yang sebelumnya saya selesaikan dengan PHP murni.

Adakah yang kembali dari menggunakan kerangka kerja ke pendekatan tanpa kerangka kerja. Apakah ada kerangka kerja keamanan dasar (mencegah XSS, memfilter data yang diposting, menyediakan fungsi pembersihan untuk digunakan dengan database)? Saya pikir sesuatu seperti itu akan menguntungkan saya lebih dari kerangka skala penuh. Saya pikir belajar bekerja dengan kerangka kerja telah mengajari saya banyak hal, tetapi saya akan lebih senang bekerja dengan kode saya sendiri.


5
Saya ingin mendengar lebih banyak tentang mengapa Anda mengatakan tentang menggunakan kerangka waktu 3-4 kali dibandingkan dengan tanpa kerangka .. apakah Anda keberatan menjelaskan lebih lanjut tentang itu?
Lukman

7
Salah satu manfaat CI, atau kerangka kerja apa pun, adalah bahwa CI memaksa Anda ke dalam pola desain yang lebih mudah bagi pengembang yang tidak terbiasa dengan gaya pengembangan khusus Anda untuk dipelihara. Selain itu, di lingkungan yang lebih besar, memisahkan tampilan dari logika sangat penting sehingga guru CSS Anda dapat melakukan tugasnya tanpa menginjak kaki pengembang.
Kyle Noland

1
Pertanyaan bagus, jika saya punya pilihan, saya menggunakan PHP murni. Tetapi sebagian besar waktu, orang-orang tempat saya bekerja ingin saya menggunakan kerangka kerja, jadi saya hanya menagih jam ekstra kepada mereka :) Saya merasa kode saya sendiri dapat dibaca, terorganisir dengan baik, dan stabil. Mungkin mereka takut harus membuat Anda tetap aktif jika terjadi bencana dan semua kode dalam status "your-custom-framework-that-noone-else-can-read".
SSH

Jawaban:


101

Versi PHP5 saat ini menyertakan banyak kerangka keamanan yang Anda cari sebagai bagian dari pustaka standar.

Jika Anda menerima HTML sebagai masukan, saya sarankan untuk mengambil Pemurni HTML dan memanggilnya melalui baris FILTER_CALLBACK di penyiapan filter_input_array Anda. Pendekatan berbasis daftar putih untuk memasukkan keamanan membuat garis pertahanan pertama yang hebat (dan sangat kuat) melawan XSS.

Sejauh yang saya tahu, PHP tidak hadir dengan mekanisme untuk melindungi dari pemalsuan permintaan lintas situs , tetapi saya yakin Google dapat membantu Anda dengan yang satu itu. The OWASP Keamanan cheatsheets termasuk bagian di atasnya jika Anda ingin menerapkan perlindungan Anda sendiri.

Karena penasaran, saya memutuskan untuk juga mulai melihat komponen mandiri dan inilah yang saya temukan sejauh ini:

Templating:

  • Warisan Template PHP (PHP Reguler ditambah warisan template)
  • TWIG ( sintaks gaya Django / Jinja2 / Liquid termasuk autoescape dan sandboxing. Mengkompilasi ke cache PHP untuk kecepatan.)
  • Dwoo (Lebih cepat, lebih berfitur, penerus PHP5-ish untuk Smarty . Termasuk sistem kompatibilitas untuk template Smarty yang ada.)

Hal-hal yang masih belum saya periksa dengan benar:


Terima kasih, semua nasihat yang sangat bagus dan saya akan mulai memeriksanya sekarang!
Alex C

4
Tukar Smarty dengan Dwoo jika Anda membutuhkan mesin templating. Keistimewaannya hampir identik dengan Smarty tetapi tidak mencairkan CPU.
Phil Sturgeon


4
Jika kerangka kerja memperlambat Anda maka hindari mesin templat, khususnya Smarty, seperti wabah. Mereka bermaksud baik tetapi mereka hanya membuat cara baru dan non-intuitif untuk melakukan sesuatu yang sudah dilakukan PHP.
Night Owl

Tergantung pada apa yang ingin Anda capai dan mengapa kerangka kerja memperlambat Anda.
ssokolow

10

Saya tidak percaya pada kerangka kerja ... Saya telah bekerja di banyak dari mereka.

Alasan membenci kerangka kerja MVC:

1) Code bloat, saya membeli kelas premium yang membantu saya dalam pengembangan. Seperti kelas formulir atau kelas SQL.

2) Saya percaya bahwa kerangka kerja MVC tidak mudah dibawa-bawa terutama saat menggunakan manajer ketergantungan.

3) Saya percaya bahwa Anda benar-benar menulis lebih banyak kode dengan kerangka kerja MVC daripada jika Anda harus menggunakan boilerplate dengan banyak kelas berguna yang menangani otentikasi, dll.

4) Sebagian besar kerangka juga melayani hanya satu atau dua database secara native.

Saya akan menyarankan menemukan kerangka formulir dengan otentikasi dan editor teks & kerangka sql seperti madoo + kelas email ...

90% dari aplikasi Anda selalu dalam bentuk, KELAS sql & ajax - sisanya dapat diperoleh saat dibutuhkan

Saya seorang minimalis dan saya berjuang dengan gagasan memiliki kode di aplikasi saya yang tidak melakukan apa-apa ... kalau-kalau saya membutuhkannya tidak berhasil untuk saya.


Mengenai pernyataan "Saya membeli kelas premium": dari mana Anda membeli kelas semacam itu, dan untuk tujuan apa? Terima kasih.
dotancohen

Saya setuju. Juga ada kinerja yang cukup bagus dengan banyak kerangka kerja.
developerbmw

8

Dengan banyak pengalaman di belakang Anda, Anda harus memiliki kumpulan perpustakaan favorit Anda sendiri, memilih sendiri dan menghasilkan kerangka kerja sederhana Anda sendiri. Kerangka kerja atau tidak ada kerangka kerja (dan yang mana) tergantung pada jenis proyek yang sedang dikerjakan, tidak ada sarung tangan yang cocok untuk semua. Jadi saya akan sangat menyarankan bahwa jika Anda merasa bahwa kerangka kerja yang ada memperlambat Anda, luangkan waktu dan buat kerangka yang berfungsi sesuai kebutuhan Anda.


8

Berdasarkan pernyataan Anda bahwa Anda telah menggunakan PHP sebagai hobi, serta pernyataan profil Anda "Perlahan-lahan", ini sepertinya masalah kurva belajar. Anda tampaknya tidak memiliki kedalaman dan keluasan pengalaman untuk a) memahami bagaimana bekerja dalam struktur yang diberlakukan oleh kerangka kerja dan b) dengan demikian Anda tidak dapat memperoleh manfaat dari efisiensi yang dimungkinkan kerangka kerja.

Saya mendorong Anda untuk mematuhinya. Kembali ke awal dengan tutorial video. Temukan dan baca kode orang lain sampai Anda memahaminya. Bangun proyek Anda dari bawah ke atas - mulailah dengan sederhana, dan tambahkan fungsionalitas. Ikuti forum, mencoba menjawab pertanyaan sendiri sebelum membaca balasan.

Saya telah memprogram secara profesional selama hampir 20 tahun, di berbagai platform, dan saya masih butuh waktu untuk merasa nyaman dengan CI. Tapi sekarang saya, saya tidak akan kembali ke PHP murni (untuk proyek saya sendiri) kecuali saya memiliki situs dengan skala yang cukup sehingga mengekspos masalah kinerja yang dapat diukur (pikirkan Twitter).


Saya masih berada di garis batas apakah saya juga suka kerangka kerja atau tidak. Saya pasti mengerti maksud OP, tapi saya juga melihat poin OP Anda ... mempelajari kerangka kerja sama seperti mempelajari bahasa yang sama sekali baru. Anda harus masuk ke dalam cara kerangka melakukan sesuatu. Hal lain yang saya perjuangkan, bagaimanapun, adalah jika filosofi saya tentang bagaimana hal-hal harus dilakukan berbeda dari kerangka kerja. Saya masih mencoba menemukan yang cocok untuk saya. (Tidak sabar untuk .NET MVC3)
mpen

Sampai saat ini, saya tidak tahu framework lain, jadi saya tidak bisa berbicara secara umum. Tetapi menggunakan kerangka bukanlah proposisi semua atau tidak sama sekali. Misalnya, saya menemukan pustaka cache CI (halaman, database) tidak cukup dan tidak mudah diskalakan. Jadi saya menggunakan pustaka cache pihak ketiga (Phil Sturgeon's) dan saya cukup puas dengannya.
coolgeek

Keuntungan signifikan lainnya untuk bertahan dengan itu adalah membuatnya relatif mudah untuk mempelajari kerangka kerja lain selanjutnya. Inilah sebabnya mengapa Anda sering melihat daftar pekerjaan yang menetapkan kerangka kerja tertentu (katakanlah, CI), tetapi menyatakan bahwa pengalaman dengan kerangka kerja serupa (misalnya Zend, atau Symfony) akan dipertimbangkan.
coolgeek

2

Zend Framework benar-benar super untuk itu. Anda dapat menggunakan sebanyak atau sesedikit yang Anda inginkan. Semuanya dikodekan dalam php dan bersumber terbuka sehingga Anda bisa meretasnya dan menjadikannya milik Anda. Komponen yang berbeda tidak bergantung satu sama lain seperti pada kerangka lainnya.

Anda dapat membangun sendiri kerangka kerja sederhana menggunakan beberapa komponen dari Zend tanpa masalah.

Coba lihat !


3
Dia mencoba menjauh dari kerangka kerja.
WarmWaffles

1
@Bayu_joo Itulah mengapa saya berbicara tentang menggunakan bagian-bagian ZF. Tentunya Anda tidak mengharapkan pria menemukan kembali roda untuk segalanya.
Iznogood

2
Iznogood memiliki poin yang sangat bagus. ZF lebih dari sekedar kerangka kerja. Saya telah menemukan paket-paket tersebut sangat berguna untuk melakukan banyak tugas umum, dan tidak ada yang memaksa Anda untuk menggunakan pola MVC atau metode akses DB mereka atau apa pun. Tentu saja, Anda juga bisa menggunakan modul Pear.
Bob Baddeley

2
Ini adalah perpustakaan ya yang juga menggunakan kerangka kerja. Bagaimanapun dia mencari sesuatu yang mudah digunakan, dan terakhir kali saya memeriksa namespace Zend berantakan dan sulit untuk diketik. @Bob_Baddeley PEAR adalah saran yang bagus
WarmWaffles

@WarmWaffles Yah untuk masing-masing miliknya sendiri. Mungkin Anda bisa mengecek Zend di 1.10.x sekarang dan sangat berbeda kemudian katakan 1.8.
Iznogood

2

Saya tahu persis apa yang Anda rasakan. Saya mulai 4 ~ 5 tahun yang lalu di PHP (saya berasal dari Delphi, lol), dan mulai dengan php murni. Apa yang saya dukung adalah "CMS Panel like" yang hanya membaca semua kolom tabel dan membuat formulir. Setelah beberapa lama saya mencapai pengetahuan tentang Kerangka PHP, saya mencoba CakePHP untuk pertama kalinya dan tidak suka, setelah itu masuk ke Yii yang menurut saya cukup intuitif dan mudah digunakan (Dengan generator Gii itu cukup banyak). Saya Mencoba Symfony, ZF2, Laravel, Yii2-Beta dan beberapa kerangka kerja untuk RAD, tetapi tetap saja saya tidak merasa cukup cepat seperti sebelumnya kerangka kerja.

Kebetulan saya mengembangkan kerangka kerja saya sendiri (Secara alami, tidak persis saya bangun suatu hari dan berkata "Saya akan membuat kerangka baru", terjadi seiring waktu). Saya Tahu ini adalah praktik buruk yang buruk dan gerakan "wheel reinvention", TAPI, sekarang saya mengembangkan proyek saya jauh lebih cepat (lebih dari PHP saja).

Karena kodenya adalah total MESS, saya mulai sekitar satu bulan yang lalu untuk merumuskan kembali kerangka kerja saya, sekarang menggunakan komposer, mengikuti aturan umum yang ada di antara kerangka kerja php, adalah MVC.

Mengapa saya menyusun ulang? Karena jika seseorang perlu memperbaiki proyek saya, itu tidak akan menjadi hal dunia lain.

Jadi saya mengerti Anda.

Saran saya adalah, persiapkan alat Anda (sebut saja kerangka kerja, aplikasi prasetel, atau apa pun namanya), dan gunakan sesuai keinginan Anda, tetapi tetap ikuti beberapa aturan umum (Seperti MVC, hal-hal yang "mudah dibuat modul" yang mana Anda dapat mengganti jika rusak.


1

Untuk keamanan dasar, saya menggunakan metode filter khusus yang membungkus superglobals saya . Sintaksnya perlu dibiasakan, tetapi lebih sederhana daripada API filter_var () PHP dan tidak membiarkan Anda menyelewengkan sanitasi:

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

Ini juga memungkinkan pelolosan $ _REQUEST-> sql () sebaris. Tetapi untuk pekerjaan database tetap gunakan SQL berparameter, atau DAL / ORM pilihan Anda.


Itu benar-benar solusi yang cerdas, tetapi saya tidak yakin mengapa menurut Anda API filter tidak praktis. Jika ada, saya pikir filter_input_array () sangat baik. (Terutama karena membuatnya mudah untuk mendefinisikan semua masukan untuk jenis permintaan tertentu di satu tempat dengan cara yang cukup deklaratif. Jangan pernah meremehkan manfaat dari hal semacam itu.)
ssokolow

@ssokolow: Memang, filter_input_array () bagus untuk melakukannya dalam satu gerakan. Namun demikian, sudah terlalu banyak fleksibilitas dalam fungsi filter_ *, dan terlalu banyak parameter yang tidak sesuai. Itulah mengapa saya pikir orang-orang menghindarinya (meskipun secara teknis ini adalah solusi yang baik).
mario

Mungkin. Saya pikir sebagian dari masalahnya adalah, selain baru-baru ini tiba di dunia di mana banyak orang masih memiliki buku PHP4 di rak mereka, kurang diiklankan, dokumen resmi tidak cukup jelas, dan dokumen W3Schools yang cenderung berbagi hasil teratas Google tidak cukup komprehensif.
ssokolow

1

Saya melakukan studi satu hari tentang ToroPHP dan merasa cukup bagus. Ini adalah kerangka kerja minimalis yang ditargetkan untuk aplikasi RESTful. Ini memungkinkan untuk menjaga kode sisi server tetap modular, tanpa harus berurusan dengan pembengkakan kerangka kerja apa pun.


1

Saya tidak tahu apa yang mengganggu Anda, tetapi codeigniter adalah kerangka kerja yang bagus, memiliki dokumentasi yang bagus dan karena banyak orang menggunakan codeigniter, Anda akan menemukan semua bantuan dalam dokumentasinya, atau forum atau di stackoverflow. Saya telah mengerjakan banyak kerangka kerja ( Codeigniter, CakePHP, Zend, Spring 3.0, Ruby on Rails), tetapi saya harus mengatakan codeigniter memiliki dokumentasi terbaik. Ada banyak hal di codeigiter yang ditangani secara otomatis dan Anda tidak perlu khawatir tentang keamanan. Bekerja pada inti PHP seperti menciptakan kembali roda. Yang paling penting adalah berpindah dari satu inti ke kerangka kerja akan membutuhkan banyak usaha Anda setelah Anda terbiasa, Anda akan mulai menyukainya. Selain itu, Ruby on rails juga merupakan kerangka kerja yang bagus setelah Anda mengetahui seluk beluknya. memiliki kecepatan ganda.


2
Sudah lebih dari dua tahun sejak saya memposting ini dan saya benar-benar bekerja dengan PHP murni untuk sementara waktu, tetapi sejak itu beralih kembali ke PHP - Anda benar, ini sangat mudah digunakan. Pengaturan pilihan saya saat ini adalah CI, phpActiveRecord untuk database dan Twig untuk pembuatan template.
Alex C

Ya, phpActiveRecord terlihat bagus. Apakah Anda pernah mencoba Laravel? ( laravel.com ) Saya rasa Anda akan menemukannya memiliki CI, phpActiveRecord dan Twig terbaik yang semuanya dibangun secara default. Saya sendiri telah menjadi pengembang CakePHP, tetapi sangat tertarik dengan Laravel belakangan ini.
Simon East
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.