-
Notifications
You must be signed in to change notification settings - Fork 39
Controller Crud
Контроллер который класс, реализует CRUD - Create/Read/Update/Delete наших сущностей, требует реализованный Crud класс.
Поведение CRUD контроллера можно описать следующей схемой:
GET <has PK> -Ⓨ→ <it is> -Ⓝ→ [error]
| |
Ⓝ Ⓨ
↓ ↓
[create form] [edit form]
POST <create> -Ⓨ→ [success]
|
Ⓝ
↓
[create form]
[error stack]
PUT <save> -Ⓨ→ [success]
|
Ⓝ
↓
[edit form]
[error stack]
DELETE <it is> -Ⓝ→ [error]
|
Ⓨ
↓
[success]
Нет
с версии 7.0 появился Controller-Mapper
Для создания управляющего контроллера потребуется приблизительно такой код:
use Application\Model;
use Bluz\Controller\Mapper\Crud;
/**
* @acl Read
* @acl Create
* @acl Update
* @acl Delete
*
* @accept HTML
* @accept JSON
*/
return function () {
/**
* @var Controller $this
*/
$crud = new Crud();
$crud->setCrud(Model\Crud::getInstance());
$crud->get('system', 'crud/get', 'Read');
$crud->post('system', 'crud/post', 'Create');
$crud->put('system', 'crud/put', 'Update');
$crud->delete('system', 'crud/delete', 'Delete');
return $crud->run();
};
Для данного контроллера следует реализовать один шаблон, который должен представлять из себя форму создания/редактирования элемента:
<?php $uid = uniqid('form_'); ?>
<form id="<?=$uid?>" action="<?=$this->url('test', 'crud')?>" class="form-horizontal ajax" method="post">
<input type="hidden" name="_method" value="<?=$method?>"/>
<input type="hidden" name="id" value="<?=$row->id?>"/>
<div class="modal">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h3>Test Table</h3>
</div>
<div class="modal-body">
<div class="control-group">
<label class="control-label" for="name"><?=__('Name')?></label>
<div class="controls">
<input type="text" class="input-xlarge" id="name" name="name" value="<?=($row->name)?>" />
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary"><?=__('Save')?></button>
<a href="#" class="btn" data-dismiss="modal"><?=__('Close')?></a>
</div>
</div>
</form>
Теперь можно создавать кнопки для редактирования и удаления сущностей на любой странице:
<!-- create button -->
<a href="<?=$this->url('test', 'crud')?>" class="btn dialog" data-ajax-method="get">Create</a>
<!-- edit button -->
<a href="<?=$this->url('test', 'crud', ['id'=>123]);?>" class="btn dialog" data-ajax-method="get">Edit</a>
<!-- delete button -->
<a href="<?=$this->url('test', 'crud', ['id'=>123]);?>" class="confirm btn btn-danger ajax" data-ajax-method="delete">Delete</a>
Для CRUD контроллера лучше всего описать привилегию
Management
и проверять её посредством функционала заложенного в помощникеurl()
Acl
Application
Auth
Cache
Common
— Exception
— Collection
— Container
— Helper
— Options
— Singleton
Config
Controller
— Data
— Mapper
—— Crud
—— Rest
— Reflection
Crud
— Crud Table
Db
— Row
— Table
— Relations
— Query
Debug
EventManager
Grid
Http
Layout
Logger
Mailer
Messages
Nil
Proxy
Registry
Request
Response
Router
Session
Translator
Validator
View