【学习笔记】基于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', 'a@a.a'); INSERT INTO `mffc_user` VALUES ('2', 'yale', 'b@b.b');
5. 添加路由到MFFC/config/routes.php
Macaw::get('user/info', '\MFFC\Controllers\UserController@info');
6. 添加视图文件 app/views/userinfo.html
<ul> {% for user in userinfo %} <li>{{ user.name }}</li> {% endfor %} </ul>
7. 通过浏览器访问 http://www.mffc.com, 应该可以看到输出结果
jahng yale