Skip to content
Anton edited this page Jun 2, 2016 · 12 revisions

Описание

Контроллер который класс, реализует 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">&times;</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()