过渡到MVC编码的最佳方法是什么?

时间:2010-05-17 17:45:04

标签: php model-view-controller frameworks

自从我拿起一本PHP书并开始用PHP编码以来,已经有大约5个月了。起初,我创建了我的所有网站,没有任何组织计划或MVC。我很快发现这很痛苦...... 然后我开始阅读有关如何分离php和html的stackoverflow,这就是我以来一直在做的事情。

Ex: 
profile.php <--this file is HTML,css. I just echo the functions here. 
profile_functions.php <--this file is mostly PHP. has the functions.

这就是我到目前为止分离所有编码的方式,现在我觉得我应该继续开始MVC。但问题是,我以前从未使用过课程并且习惯了它们。因为MVC(例如cakephp和codeigniter)都是类,所以这不是好事。

我的问题:有没有好的书籍/网站/文章教你如何在MVC中编码?我正在寻找初学者初学者书籍:) 我刚开始阅读the codeigniter manuel,我想我会用它。

编辑:是否可以在不使用cake,codeigniter等的情况下为您的编码创建MVC组织结构?基本上只是将profile.php分成三个不同的文件(视图,控制器,模型)

5 个答案:

答案 0 :(得分:1)

MVC只是一种设计模式。这不是你可以“编码”的东西。

如果你想用PHP编写代码,这里有关于PHP中MVC的article。它概述了设计模式,然后是一个例子。

答案 1 :(得分:1)

我是如何通过本教程学习的:
http://www.symfony-project.org/jobeet/1_4/Doctrine/en/

主要关注的是学习Symfony框架,但默认情况下,您将接触并学习良好的MVC原则。

答案 2 :(得分:1)

这不是PHP,但看看你是否可以获得Tate Bitter Java的副本。它将讨论事物的组织方面(组织代码改进内容的方式和原因)。

我有点犹豫是否推荐一本用于PHP编程的优秀Java书籍,但本书是少数几本从没有组织计划编写的代码开始并将其改进为类似MVC的结构而不使用第三方图书馆。这样,它从实际的角度教你组织的内容。希望一旦你理解了这个模式,将这些想法转化为PHP就不会太难了。

另一种方法是获取数十个PHP框架中的一个并重新编码到框架中。这样做可以更快地获得结果,但缺点是您可能会更详细地理解这些结果,并且从头开始重写代码后,代码的可能性很小。我们都喜欢认为新东西会完成旧东西所做的一切,但我们常常会忘记某些东西(或者它的行为方式不同)。

答案 3 :(得分:1)

MVC是一种“通用”设计模式,并非特定于任何语言。更多的编码哲学。在最基本的层面上,它只是将数据与业务逻辑和表示分开。下面是使用MVC的“模板”系统的简单示例。您可以在不破坏任何内容的情况下更换任何部件,并且数据与格式/显示无关。这是示例代码,效率不高。

模型,获取数据:

function getName($id) {
    $name = array('_first_'=>'Joe', '_last_'=>'Smith', '_mi_'=>'C');
    return $name
}

控制器,处理它:

$name = getName(1);
$name['_fullname_'] = $name['_first_'].' '.$name['_mi_'].'. '.$name['_last_'];
outputView($name);

查看,输出内容:

// Example html file: <b>Hello _fullname_, how are you</b>
function outputView($view, $data) {
    switch ($view) {
    case 'xml':
         $out = file_get_contents('view.xml');
    case 'html':
         $out = file_get_contents('view.html');
    case 'json':
         $out = file_get_contents('view.json');
    }
    $search_for = array_keys($data);
    $replace_with = $data;
    echo str_replace($search_for, $replace_with, $out);
}

答案 4 :(得分:1)

回答你的问题

  

是否有可能拥有MVC   组织结构与您的编码   不使用蛋糕,codeigniter等?   基本上只是分开说   profile.php分为3个不同的文件(   视图,控制器,模型)

...绝对

第一个文件profile.php(视图,浏览器触及的内容)

<?php
include( 'controllers/UsersController.php' );
$controller = new UsersController();
$controller->profile();
$pageData = $controller->data;
?>

控制器

<?php
include 'models/UsersModel.php';
class UsersController{

public $data;
public $model;

public function __construct(){
    $this->model = new UserModel();
}

public function profile(){
    $this->data = $this->model->findUser();
}

}

模型

<?php

class UsersModel{

public function __constuct(){
    // connect to your db or whatever you need to do
}

public function findUser(){
    return mysql_query( "SELECT * FROM users WHERE users.id =  2  LIMIT 1" );
}
}