【学习笔记】基于Composer创建MVC框架(五)—— 集成doctrine

这一篇文章记录如何把之前学到的 ORM 库 doctrine 集成到 MFFC 框架里面,同时也实现 MVC 里面的 model 层。

 1. 修改 composer.json,并且执行 composer update

"doctrine/orm": "v2.5.6"

2. 创建文件 MFFC/config/database.php

<?php
$database = array(
	'driver' => 'pdo_mysql',	
	'host' => '127.0.0.1',	
	'user' => 'root',	
	'password' => '',	
	'dbname' => 'mffc'
	);

 3. 创建文件 app/models/BaseModel.php

<?php

namespace MFFC\Models;

use Doctrine\ORM\Tools\Setup as Setup;
use Doctrine\ORM\EntityManager as EntityManager;

class BaseModel{
	protected  $EntityManager = NULL;

	public function __construct(){
		require_once './config/database.php';		
		$isDevMode = true;		
		$config = Setup::createAnnotationMetadataConfiguration(array(__DIR__."/app/models"), $isDevMode);		
		$conn = $database;
		// obtaining the entity manager		
		$this->entityManager = EntityManager::create($conn, $config);
	}
}

 4. 创建 MFFC/app/models/UserModel.php

<?php

namespace MFFC\Models;
/**
 * @Entity @Table(name="mffc_user")
 **/
 class UserModel extends BaseModel{
     /** @Id @Column(type="integer") **/
    protected $id;    
    /** @Column(type="string") **/
    protected $name;    
    /** @Column(type="string") **/
    protected $email;	
    
    public function __construct(){
    	parent::__construct();
    }
	
    public function findAll(){
    	$records = $this->entityManager->getRepository(__CLASS__ )->findAll();		
    	foreach ($records as $record) {		    
    	    $result[]['name'] = $record->getName();
	}		
	return $result;
    }
	
    public function getName(){		
        return $this->name;
    }

}

这个实体对应了 mffc_user这个表

-- ------------------------------ Table structure for `mffc_user`-- ----------------------------
DROP TABLE IF EXISTS `mffc_user`;
CREATE TABLE `mffc_user` (
  `id` int(11) NOT NULL,  
  `name` varchar(255) NOT NULL,  
  `email` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- ------------------------------ Records of mffc_user-- ----------------------------
INSERT INTO `mffc_user` VALUES ('1', 'jahng', '[email protected]');
INSERT INTO `mffc_user` VALUES ('2', 'yale', '[email protected]');

 5. 添加路由到MFFC/config/routes.php

Macaw::get('user/info', '\MFFC\Controllers\[email protected]');

 6. 添加视图文件 app/views/userinfo.html

<ul>
    {% for user in userinfo %}
    <li>{{ user.name }}</li>
    {% endfor %}
</ul>

 7. 通过浏览器访问 http://www.mffc.com, 应该可以看到输出结果

jahng
yale