2009-09-18 31 views
0

我想在MVC架構中創建一個網站,而不使用任何框架。 什麼是文件/文件夾結構(模塊/視圖/模型)。在MVC中創建網站,並且不使用任何框架,但在簡單的PHP中,結構是什麼?

編輯:我知道Zend,CakePHP。但我的問題是我們如何構建簡單的PHP。 我不想使用任何框架,因爲我需要最大的性能/速度。 我聽說框架比較簡單的PHP web應用程序比較慢, 這就是爲什麼我選擇簡單的PHP

編輯2:我想每一個網頁,通過index.php文件被調用,

+1

你可能不想*使用*任何框架,但你可以肯定*從他們那裏學習*看看Code Igniter如何佈局文件/文件夾。 – 2009-09-18 08:06:15

+0

Ditto Dominic Rodger - CakePHP對於涉及文件夾的MVC思維方式非常簡單。 3個文件夾 - 控制器,模型,視圖 - 簡單! – richsage 2009-09-18 08:10:30

回答

0

我真的很喜歡symfony樹結構 http://andreiabohner.files.wordpress.com/2007/03/cheatsheetsymfony001_enus.pdf

關於你的編輯,我建議symfony的目錄結構(或它的一個子集,如你所需),不要使用symfony。

關於框架性能,這取決於。良好的框架知道他們的問題,並使用緩存和其他優化技術;使用一個輕量級的http服務器,而不是apache,可能是另一個isuue。但一切都取決於你的特殊需求。

2

你可能有這樣的結構:

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

的index.php是前裝載機 - 所有網址都通過這個和它的作品了調用基於URL的哪個控制器。您可以使用mod_rewrite從URL中刪除index.php。

views /文件夾包含您的html,rss,xml等查看文件 - 您將從您的控制器中填充這些值。你可以在這裏使用Smarty,但坦率地說,我沒有看到這一點。

型號/文件夾將包含您的ORM或數據庫連接代碼。模型很容易從頭開始編寫。

控制器/文件夾將包含每個URL一個控制器文件。說,books.php處理圖書的CRUD網址。每個控制器都應該加載模型並使用數據填充視圖。

util /文件夾可以容納任何非模型或控制器的類。助手的東西,如安全,會話管理等。

看到你自己寫的東西,你可以刪除cruft並保持簡單。但是你可能會發現它實際上比你想象的要大。我知道你不想使用它,但Code Igniter確實使事情變得非常簡單,輕鬆,並且不會像Cake和Symfony那樣爲其他框架做很多事情。

+0

這是一個好主意,只保留你想要直接從網站訪問根目錄下的文件。這樣更安全。 – slikts 2009-09-18 09:00:21

0

在使用Zend Framework之前,我曾經做過類似的事情。

下面是文件/文件夾結構:

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

瀏覽:包含所有的模板,每個控制器一個/動作

佈局:一個佈局,獲取包含文件名包括VAR(從意見)

控制器:控制器

庫:項目所需的所有額外的工具

等:單證等。

數據:文件上傳用於初始化整個項目

Site.php文件,一種由index.php文件

指數稱爲自舉。 PHP:撥打引導

<?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; 
    } 

} 

然後,在我的索引我所做的:

$action = $_GET['action']; 

$site = new Site($action); 

$site->run(); 

我刪除爲了方便一些額外的安全檢查...

然後,您可以擴展此包括來自控制器等稱爲車型目錄...

0

我已經建立caret到成爲最簡單的VC平臺。

我有一個簡單的C文件,將元數據從我然後使用JavaScript(服務器端)構建URL路由器以及將文件鏈接到一起的函數的註釋中抽取出來。這是非常簡單的,使編程輕而易舉,沒有OO古怪。

請注意,我沒有M.我用我自己的語言來完成模型方面的工作,但總的來說,它減少到了一個函數,該函數獲取表和一組充當RPC調用的函數。我使用Kira ..

0

隨着用戶MEDER建議,嘗試很簡單的MVC框架web2bb。我的端口也是PHP 5.2的增強和優化。您可以通過SVN這裏訪問它的源代碼:

Google Code web2bb-php52

源已嵌入BLOG示例應用程序。

相關問題