11.2 Repository definition
The Repository is a singleton capable to manage all model instances. We have to define a Repository for each Model.
Let's image we have our User and Group models in myproject/model directory:
- context.xml
- Group.php
- User.php
Inside our context.xml we can define our models Repositories:
<?xml version="1.0" encoding="UTF-8"?>
<context namespace="myproject.model">
<objects>
<object id="myproject.model.GroupsRepository" class="metadigit\core\db\orm\Repository">
<constructor>
<arg name="class">myproject\model\Group</arg>
</constructor>
</object>
<object id="myproject.model.UsersRepository" class="metadigit\core\db\orm\Repository">
<constructor>
<arg name="class">myproject\model\User</arg>
</constructor>
</object>
</objects>
</context>
Now we can inject our Repositories inside a Controller and use its CRUD methods.
<?xml version="1.0" encoding="UTF-8"?>
<context namespace="myproject.apps.web">
<objects>
<object id="myproject.apps.web.UsersController" class="myproject\apps\web\UsersController">
<properties>
<property name="UsersRepository" type="object">myproject.model.UsersRepository</property>
</properties>
</object>
</objects>
</context>
<?php
namespace myproject\apps\web;
use metadigit\core\http\Request,
metadigit\core\http\Response;
class UsersController extends \metadigit\core\web\controller\ActionController {
/** UsersRepository
* @var \metadigit\core\db\orm\Repository */
protected $UsersRepository;
/**
* @param Request $Req
* @param Response $Res
* @param integer $id
* @param boolean $star
*/
function listAction(Request $Req, Response $Res, $id, $star) {
$usersArray = $this->UsersRepository->fetchAll();
$Res->set('users', $usersArray)
->setView('users-list');
}
/**
* @param Request $Req
* @param Response $Res
* @param integer $id
*/
function detailAction(Request $Req, Response $Res, $id) {
$User = $this->UsersRepository->fetch($id);
$Res->set('User', $User)
->setView('users-detail');
}
}
Updated about 1 month ago