nasıl mvc mimari hiçbir çerçeve olmadan php kullanılır?
Ben genelde ortak çerçeveler birini kullanarak muhtemelen gitmek için yol olduğunu düşünüyorum. Nedeni çok iyi geliştiriciler, bug-sabitleme yazma verdiği ve sitenizi dayandırarak için sağlam bir şey yaratmak için parlatma uzun bir zaman geçirdim olmasıdır. Yapılacak en iyi şey (değil için bir neden bulmak sürece), sizin gibi birini bulmak öğrenmek ve onunla kalmaktır. PHP ile çalışırken, seçimim Zend Framework, genel olarak, fakat CodeIgniter, Symfony, CakePHP da vardır ve a {[( 4)]}.
Bu MVC temel ilkelerinden biridir, çerçeveler sadece bunu başarmak yardımcı - hala varolan çerçeve olmadan MVC deseni kullanmak istiyorsanız, birbirinden birlikte kendi koyarak ya da sadece mantıksal dışında her endişe ayırma seçim var ya .
Rasmus Lerdorf wrote about his minimal approach to the MVC pattern in PHP 2006 yılında. Okuma değer olabilir. Oldukça umut verici görünüyor - Ayrıca, (sadece PHP 5.3 +) gibi F3::PHP gibi bir mini çerçeve ilginizi çekebilir.
Bir id verilen bir araba açıklayan bir "araba" sayfası (http://example.com/car.php?id=42) görüntülenmesini istediğiniz düşünün:
Çok temel, sizin gibi bir hiyerarşi ile kodunuzu yapılandırabilirsiniz:
+ htdocs/
- car.php
<?php
require_once 'Car.php';
$car = car::getInformationById($_GET['id']);
require 'car.tpl';
?>
+ model/
- Car.php
<?php
require_once 'Database.php';
class Car {
public static function getInformationById($id) {
$result = Database::getInstance()->query(
"SELECT model, year, price " .
"FROM car " .
"WHERE id = " . (int) $id
);
return $result->fetch_assoc();
}
}
?>
+ views/
- car.tpl
<html>
<head>
<title>Team - <?php $GLOBALS['car']['model'] ?></title>
</head>
<body id="car">
<h1><?php $GLOBALS['car']['model'] ?></h1>
Year: <?php $GLOBALS['car']['year'] ?>
Price: <?php $GLOBALS['car']['price'] ?>
</table>
</body>
</html>
"Htdocs" ideal siz de "kontrolörler" adını unutmayın ki, sizin belge kök olmalıdır.
İşte bu.
Siz şablonları $ GLOBALS kullanımını fark edebilirsiniz, bu size "kontrolör" den almak bu yerel şablon değişkenleri belirlemek için kullanışlı bir kodlama standart olabilir.
Çalışması için yukarıdaki kod için, sizin gibi bir şey gerekir:
+ model/
- Database.php
<?php
class Database {
private static $instance = null;
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new mysqli("localhost", "user", "password", "database");
}
return self::$instance;
}
}
?>
ve PHP ile yapılandırılmış olması gerekir:
include_path="/the/path/to/model:/the/path/to/views"
Apache kullanıyorsanız eğer bu elde edebilirsiniz, güzel URL'leri isteyebilirsiniz:
RewriteEngine On
RewriteRule ^/car/([0-9]*)$ /car.php?id=$1 [L]
Bu http://example.com/car/42 dahilen http://example.com/car.php?id=42 dönüştürülmüş olacak gibi URL'leri yazma sağlar
PHP dosyaları olmak, hiçbir şey headers.tpl, footers.tpl, menu.tpl, oluşturmanızı önler ... Eğer () / yinelenmiş HTML önlemek için () gerektiren dahil ile yeniden hangi.
Bu Rasmus Lerdorf belirtildiği gibi çok aynı ruhla şöyledir: http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html.
Bir MVC (n) kaldığını unutmamak gerekir (mimari) pattern. Onlar code, bunun yerine "kütüphaneler" adında olurdu yeniden olurdu Yazılım Desenler, ortak sorunları çözmek için yeniden ilkelerdir.
Zend Framework, Symfony, CakePHP ve seviyor gibi çerçeveler bir MVC yaklaşımını benimsemeye bir yapı önermektedir ama hiç zorlayamaz. Projelerinin bu tür birçok denetimleri doğrudan DB erişmek veya HTML kodu oluşturmak ve hatta vardır denetleyicileri ortaya fat controllers ...
Varolan bir çerçevede, sıfırdan basit MVC deseni değil nasıl kullanacağınızı öğrenmek için PHP MVC Tutorial kontrol edebilirsiniz.
Bir MVC deseni elde etmek için sadece HTML sayfaları ya da RSS gibi, veri kod sebat ("model", çoğunlukla veritabanı şeyler), ana uygulama mantığı ("denetleyici") ve dış dünyaya tanıtımı ("view" ayırmak zorunda ) besler.
Eğer sadece kodunuzda bu üç bölümden karışmaz IF, zaten gerçekten temel MVC mimarisi vardır. Sadece modeli, görünümü için ayrı sınıflar oluşturmak ve denetleyici katmanları, birbirleriyle konuşmak ne kadar iyi yapılandırılmış bir yol ile geldi ve daha sonra ona sopa!
Kod yönetilebilirliğinin uğruna HER ZAMAN bu şekilde çalışmak için çalışmalısınız.
MVC deseni ve OOP ilkeleri kala kendi MVC framework yazarak :)
Öyle her HTTP isteği bir dosya, index.php, app.php veya her ne istediğiniz geçer Ön Kontrol olması gerekir. Bu şekilde tek bir yerde uygulamasını yapılandırabilirsiniz.
Oradan HTTP isteği, geçerli URL, HTTP Header fiil / yöntemi ve uygun Kontrol Yöntemi / Aksiyon Denetleyicisi çağıracağı dayalı analiz edecek Yönlendirme mekanizması gerekir.
Controller, sen, "ağır kaldırma" ile başa çıkmak olacak kategorisine erişebilirsiniz veritabanı ve etki alanı / iş mantığı vs ile uğraşmak ve Kontrol sizi Görüntüleme hale getirebilir.
Yani basit MVC arhitecture için en az Ön Controller, Router / Dispatcher, Controller, Modeller ve Görüntüleme gerekir.
Diğer MVC web çerçeveleri gibi sizin tercihlerinize bağlı olarak küçük farklılıklar ile, bu polemiğe girmek yapardı.
Codeigniter gibi bazı basit çerçeveler bir göz atın, ve onlar MVC nasıl yapıyorsun fikir almak için kaynak kodu okumak.
Ve MVC bina eğlenin! D: Onun tüm Sonuçta eğlenceli hakkında