MVC Web sitesi oluşturma ve herhangi çerçeveler dışarı, ama basit PHP, ne yapı olurdu?

7 Cevap php

I want to create a web site in MVC architecture, with out using any frameworks. What would be the Files/Folder structure (Module/Views/Models).

EDIT: I know the Zend, CakePHP. but my Question is how can we structure in Simple PHP. I dont want to use any of the frameworks, because i need the maximum performance/speed. I heard that frameworks are slower comparied to simple PHP web applications , That is why i selected simple PHP.

EDIT 2: Ben her web sayfasının index.php üzerinden çağrılabilir istiyorum,

7 Cevap

Kullanıcı meder önerildiği gibi, çok basit mvc çerçeve web2bb deneyin. Gelişmiş ve PHP 5.2 için optimize edilmiş bu benim liman da bulunmaktadır. Burada svn ile kendi kaynak kodunu erişebilirsiniz:

Google Code web2bb-php52

Kaynak BLOG örnek uygulama gömmüştür.

I caret en basit VC platform olacak bina oldum.

Ben daha sonra birlikte dosyaları bağlantı fonksiyonları ile birlikte bir URL yönlendirici oluşturmak için JavaScript (sunucu tarafı) kullanın yorumların dışında meta verileri çeker basit bir C dosyası var. Bu son derece basit ve bir OO garabeti olmayan bir esinti programlama yapar.

Ben M. benim kendi dilinde modeli yönü, ama genel olarak tablo gibi RPC çağrıları hareket fonksiyonları bir dizi alır bir işleve azaltır yok Bildirimi. Ben kullanıyorum Kira ..

Sen gibi bir yapıya sahip olabilir:

  root folder/
     index.php
     views/
     models/
     controllers/
     util/

index.php ön yükleyici - tüm URL'ler bu geçmesi ve URL tabanlı aramak için hangi denetleyici çalışır. Sen mod_rewrite kullanarak URL'den index.php kaldırabilirsiniz.

views / klasör html, RSS, XML, vb görünümü dosyaları içeren - Eğer denetleyicileri bu değerleri dolduracaktır. Sen açıkçası, burada Smarty kullanabilirsiniz ama olabilir, ben nokta görmüyorum.

modeller / klasör ORM veya DB bağlantı kodunu içerecektir. Bir model sıfırdan yazmak kolaydır.

kontrolörleri / klasör URL başına bir denetleyici dosyayı içerecektir. , Kitap taşıma için CRUD URL'ler için books.php söylüyorlar. Her denetleyici modelini yüklemek ve bir görünümü doldurmak için verileri kullanmak gerekir.

util / klasör modelleri veya denetleyicisi olmayan herhangi sınıfları tutabilir. Vb Güvenlik, oturum yönetimi, gibi yardımcı şeyler

Eğer cruft ile uzakta yapmak ve basit tutabilirsiniz kendiniz yazıyoruz olarak görüyorum. Ama bunu aslında düşündüğünüzden daha büyük bir iş bulabilirsiniz. Ben birini kullanmak istemediğini biliyorum ama Kod Ateşleyici, çok basit şeyleri tutmak yapar hafif ve Kek ve Symfony gibi diğer çerçeveler yapmak olduğu için kadar yapmaya çalışmaz.

PHP orijinal yaratıcısı bu tür bir şey hakkında iyi bir makale gönderdi.

http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html

I really like the symfony tree structure http://andreiabohner.files.wordpress.com/2007/03/cheatsheetsymfony001_enus.pdf

Düzenlemeden ilgili olarak, ben Symfony kullanmak için değil, (eğer ihtiyaç olarak, ya da onun bir alt kümesi) symfony dizin yapısını göstermektedir.

Çerçeveler performansları ile ilgili olarak, bağlıdır. İyi çerçeveler onların sorunlarını biliyoruz ve önbelleğe alma kullanmayın, ve diğer optimizasyon teknikleri; hafif bir http sunucusu kullanarak, Apache yerine, başka isuue olabilir. Ama her şey sizin özel ihtiyaçlarına bağlıdır.

Zend Framework ile çalışmak için önce, benzer bir şey yapmak için kullanılır.

Burada dosya / klasör yapısı:

/
/views
/layouts
/controllers
/library
/etc
/data
Site.php
index.php

İzlenme: tüm şablonları içeren, bir başına denetleyicisi / eylem

Düzenleri: (görüşlerinden) dahil etmek için adını içeren bir var olsun bir düzen

kontrolörleri: kontrolörleri

kitaplığı: Proje için gerekli tüm ekstra araçları

vb: dokümantasyon, vb.

veri: dosya yükleme

Site.php dosya tüm proje, index.php tarafından çağrılan tür bir ön yükleme init için kullanılan

index.php: ön yükleme çağrı

<?php
class Site
{
    protected $_action = NULL;
    protected $_contentFile = NULL;
    protected $_args = array();
    protected $_headTitle = NULL;
    protected $_headerStack = array();

    public function __construct ($action)
    {
        $this->setAction($action);
        $this->setArgs();
    }


    public function setHeader($name = null, $value = null)
    {
        if (null != $name && null != $value)
        {
            $this->_headerStack[$name] = $value;
        }
    }

    public function sendHeaders()
    {
        if (null != $this->_headerStack)
        {
            foreach ($this->_headerStack as $key => $value)
            {
                header($key . ':' . ' ' . $value);
            }
        }
        return $this;
    }



    public function setAction($action)
    {
        $this->_action = (! empty($action) ) ? $action : 'error';
        return $this;
    }

    public function setArgs()
    {
        $this->_args['GET'] = $_GET;
        $this->_args['POST'] = $_POST;
    }

    public function getParam($name)
    {
        if ( ! empty($this->_args['GET'][$name]))
        {
            return $this->_args['GET'][$name];
        } else {
            return null;
        }
    }

    public function getParams()
    {
        return $this->_args['GET'];
    }

    public function getPost()
    {
        return $this->_args['POST'];
    }

    public function preRun()
    {
        if (is_file('views/' . $this->_action . '.phtml'))
        {
            $content = 'views/' . $this->_action . '.phtml';
            $this->setContentFile($content);
        }

        if (is_file('library/' . ucfirst($this->_action) . 'Action.php'))
        {
            require_once 'library/' . ucfirst($this->_action) . 'Action.php';
            if (function_exists  ('init')) 
            {
                init();
            }
        }
    }


    public function run()
    {
            $this->sendHeaders();
            $this->preRun();
            require_once 'layouts/main.phtml';
            $this->sendHeaders();
    }

    public function setContentFile($content)
    {
        $this->_contentFile = ( !empty($content) ) ? $content : '';
        return $this;
    }

    public function getContent()
    {
        require_once $this->_contentFile;
    }

    public function setHeadTitle($title)
    {
        $this->_headTitle = $title;
        return $this;
    }

    public function getHeadTitle()
    {
        return $this->_headTitle;
    }

}

Sonra, benim endeksinde yaptım:

$action = $_GET['action'];

$site = new Site($action);

$site->run();

I removed some extra security checks for convenience...

Daha sonra, bu kontrolör, vb denilen bir model dizin eklemek için uzatır ..