PHP sıfırdan MVC uygulamak nasıl?

5 Cevap php

I would like to implement MVC from scratch in PHP because I want full control of my own code and no extra bagage from existing frameworks. Anyone who has any advice?


Evet, Lerdorfs makale gördüm ve o kadar da çok kod değil gibi görünüyor. Aslında ben daha çok benim uygulama yapılanması için bir kontrolör-view çözüm istiyorum. Ben kendi ev yapımı PDO veri erişim sınıfları sadık kalacağız.

5 Cevap

Sorunuz biraz Not-Invented-Here-Syndrome gibi kokuyor. Eğer onlar iyice test edilmiş ve desteklendiğinden emin olabilirsiniz bu durumda, benim tavsiyem mevcut çerçevelerin ekstra bagaj yaşamak olacaktır. Don't reinvent the wheel.

Öte yandan, yukarıda tartışma yazılacak yeni çerçeveler engeller. Ve MVC deseni öğrenmek ve anlamak için sıfırdan is iyi bir kodlama egzersiz birini yazıyorum.

Bunu yapmak için gerçekten kararlı iseniz Dolayısıyla, benim önerim öğrenmek için what each part of MVC is, does and how they interact. Sen kaçınılmaz olarak FrontController pattern karşıya gelecek, bu yüzden de bu biri hakkında bilgi edinmek isteyeceksiniz.

Bunu yapmak isteyen tek kişi olmadığını unutmayın:

Ve Rasmus Lerdorf tarafından bu ilginç yazı da var

Ben de, PHP bir Homegrown MVC framework yazdı. Bu oldukça basit, sizin çerçeve işten herhangi bir "ActiveRecord" işlevselliğini kaldırmak özellikle. Ben kabul bazı şeyler:

How are you going to map URLs to controllers?

Bunun yerine kongre (FooController için / foo haritalar) tarafından şeyler yapıyor, ben yapılandırması yoluyla her şeyi yaptım. O benim uygulama kabul edecek her türlü URL listesi burada ben bir ana routes.php dosyasını olması. Bu yüzden onun şeylerle dolu gibi:

Router::add( '/foo/:Param1/:Param2', 
             array( 'Controller' => 'MyController', 
                    'Action' => 'my_method', 
                    'Method' => 'GET', 
                    'Parameters' => array( 'Param1' => '\d+',
                                           'Param2' => '\S+' ) );

Bu durumda biz /foo/123/abc gibi adresler maç. URL uyumlu olduğunda, bu MyController::my_method( array( 'Param1' => '123', 'Param2' => 'abc' ) ); olarak gönderilir.

How are you going to generate views?

Orada çiftleşmiş sistemlerinin çok sayıda bulunmaktadır. Ama gerçekten, PHP zaten mükemmel bir şablon sistemi. Benim çerçevede, ben sadece üst düzey Controller sınıfında bir function template() oluşturuldu. Ve hepsi bir include $Template performans aşağı kaynar. Yine, benim çerçevesinde, hiçbir kuralı yoktur. Istek bir tepki olarak HTML, XML veya JSON bekliyor ise, her kontrolör uygun örnekleniminin sorumlu ve anlayış için.

Can you use an existing framework?

Benim kod bir sürü Cake, tanınmış PHP MVC çerçevesinde esinlenilmiştir. Eğer çok geçmeden önce ben kesinlikle bunun bir göz alırdım. Eğer popüler olanlar tüm nasıl çalıştığını anlayarak, kendi, en azından başlangıç ​​rulo gidiyoruz. Sonunda, benim uygulama kendine özgü gereksinimleri benim kendi inşa ve yolda gitmek yapılmış, ama zaten orada tüm çerçeveler öğrenilecek çok şey vardı. Etrafında uzun bir göz atın ve sizin için çalışan bir şey bulabilirsiniz. En azından, size your çerçevenin dışında ihtiyaç tam olarak anlamaya olabilir.

MVC basit exemple uygulaması (sadece prensibini anlamak için)

MODEL: lib/Thing.class.php

class Thing
{
//class code ( CRUD, the application logic ...)
}

VIEW: theme/page_thing.php

<?php require("header.php");?>
//HTML CODE with some echo to show variables and loops to read arrays
<?php require("footer.php");?>

CONTROLLER: application/thing.php

require_once("lib/Thing.class.php");
/*
Some controls between the Model and the View ( if/else ...)
*/
include("theme/page_thing.php");

Sadece tekerlek "Recyle" için gidiyoruz eğer, "popüler" çerçevelerin kaynak koduna göz atabilirsiniz. Eğer tekerleği "yeniden icat" istiyorsanız, ben size başka bir yere bakmak öneririz. etki alanına özgü dil (DSL) inceleyin.

PHP CMS yaz - http://www.frasq.org/en/manual/write-a-cms-in-php - Eğer MVC ortamı oluşturmak nasıl öğretecek adım elbette bir adımdır, ve sıfırdan, çok daha fazla.

iZend - web Motor: http://www.izend.org - katı ve basit bir mimarisi ile geliştiriciler için ayrıntılı bir çerçevedir.

README soyut:

iZend is a PHP engine for developing well structured web applications with a content manager. It's aimed at programmers who want full control on the code they use with maximum adaptability and reusability. It's simple to understand, easy to extend, open to other components in PHP, Javascript or Flash. The goal is to let it become your own very quickly while still keeping all the benefits of using a software program which is constantly enriched by an open source community.

iZend is built with a straightforward architecture designed for organizing publications in several languages and for different media. It includes a content editor, a set of presentation models, a search engine with an input corrector, editable comments, file downloads, secure votes, RSS feeds, HTML newsletters, a payment system (PayPal) and more. It carefully interfaces social networks. It manages a community of users with configurable privileges.

iZend has one variant, iZend Blog, a specialized version for publishing a full featured blog.