我想在MVC架構中創建一個網站,而不使用任何框架。 什麼是文件/文件夾結構(模塊/視圖/模型)。在MVC中創建網站,並且不使用任何框架,但在簡單的PHP中,結構是什麼?
編輯:我知道Zend,CakePHP。但我的問題是我們如何構建簡單的PHP。 我不想使用任何框架,因爲我需要最大的性能/速度。 我聽說框架比較簡單的PHP web應用程序比較慢, 這就是爲什麼我選擇簡單的PHP。
編輯2:我想每一個網頁,通過index.php文件被調用,
我想在MVC架構中創建一個網站,而不使用任何框架。 什麼是文件/文件夾結構(模塊/視圖/模型)。在MVC中創建網站,並且不使用任何框架,但在簡單的PHP中,結構是什麼?
編輯:我知道Zend,CakePHP。但我的問題是我們如何構建簡單的PHP。 我不想使用任何框架,因爲我需要最大的性能/速度。 我聽說框架比較簡單的PHP web應用程序比較慢, 這就是爲什麼我選擇簡單的PHP。
編輯2:我想每一個網頁,通過index.php文件被調用,
我真的很喜歡symfony樹結構 http://andreiabohner.files.wordpress.com/2007/03/cheatsheetsymfony001_enus.pdf
關於你的編輯,我建議symfony的目錄結構(或它的一個子集,如你所需),不要使用symfony。
關於框架性能,這取決於。良好的框架知道他們的問題,並使用緩存和其他優化技術;使用一個輕量級的http服務器,而不是apache,可能是另一個isuue。但一切都取決於你的特殊需求。
你可能有這樣的結構:
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那樣爲其他框架做很多事情。
這是一個好主意,只保留你想要直接從網站訪問根目錄下的文件。這樣更安全。 – slikts 2009-09-18 09:00:21
在使用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();
我刪除爲了方便一些額外的安全檢查...
然後,您可以擴展此包括來自控制器等稱爲車型目錄...
PHP的原創者已經發布了關於這種類型的東西的好文章。
http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html
隨着用戶MEDER建議,嘗試很簡單的MVC框架web2bb。我的端口也是PHP 5.2的增強和優化。您可以通過SVN這裏訪問它的源代碼:
源已嵌入BLOG示例應用程序。
你可能不想*使用*任何框架,但你可以肯定*從他們那裏學習*看看Code Igniter如何佈局文件/文件夾。 – 2009-09-18 08:06:15
Ditto Dominic Rodger - CakePHP對於涉及文件夾的MVC思維方式非常簡單。 3個文件夾 - 控制器,模型,視圖 - 簡單! – richsage 2009-09-18 08:10:30