Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Работа со справочниками #1

Open
Goros6 opened this issue Nov 7, 2014 · 1 comment
Open

Работа со справочниками #1

Goros6 opened this issue Nov 7, 2014 · 1 comment

Comments

@Goros6
Copy link
Owner

Goros6 commented Nov 7, 2014

Справочники нужно:
показывать, любому пользователю
редактировать, администратору
Справочники:
"Организации" (enterprises)
"Штатное расписание" (units)
"Пользователи" (users)
"Согласования" (agreements)
"Статусы заявок" (purchaseStatuses)

@mikanoz
Copy link

mikanoz commented Nov 10, 2014

Похоже справочники это самая простая часть. Поэтому предлагаю начать отсюда.
В первую очередь, не будем думать о правах доступа (они потом цепляются оч. просто).
Сначала реализуем ресурсы для REST.

Общее описание здесь: http://laravel.com/docs/4.2/controllers
Попытаюсь дать короткий путь. Например, справочник статусов заявок.
Проходя по этому пути, обязательно разобраться для себя и понять, что все это значит.
Почитать официальную документацию.
Разобраться в группах, роутах, неймспейсах и автозагрузке.
Иначе потом будет трудно.

Добавляем новый route в routes.php

Route::group(array('prefix' => 'v1/api'), function() {
    Route::resource('purchaseStatus', 'Goros6\\Purchases\\Api\\PurchaseStatusController');
});

Проверяем результат:

Выполняем команду

vagrant@homestead:~/purchases.dev$ php artisan routes
+--------+------------------------------------------------------+-------------------------------+-------------------------------------------------------------------+----------------+---------------+
| Domain | URI                                                  | Name                          | Action                                                            | Before Filters | After Filters |
+--------+------------------------------------------------------+-------------------------------+-------------------------------------------------------------------+----------------+---------------+
|        | GET|HEAD /                                           |                               | Closure                                                           |                |               |
|        | GET|HEAD v1/api/purchaseStatus                       | v1.api.purchaseStatus.index   | Goros6\Purchases\Controllers\Api\PurchaseStatusController@index   |                |               |
|        | GET|HEAD v1/api/purchaseStatus/create                | v1.api.purchaseStatus.create  | Goros6\Purchases\Controllers\Api\PurchaseStatusController@create  |                |               |
|        | POST v1/api/purchaseStatus                           | v1.api.purchaseStatus.store   | Goros6\Purchases\Controllers\Api\PurchaseStatusController@store   |                |               |
|        | GET|HEAD v1/api/purchaseStatus/{purchaseStatus}      | v1.api.purchaseStatus.show    | Goros6\Purchases\Controllers\Api\PurchaseStatusController@show    |                |               |
|        | GET|HEAD v1/api/purchaseStatus/{purchaseStatus}/edit | v1.api.purchaseStatus.edit    | Goros6\Purchases\Controllers\Api\PurchaseStatusController@edit    |                |               |
|        | PUT v1/api/purchaseStatus/{purchaseStatus}           | v1.api.purchaseStatus.update  | Goros6\Purchases\Controllers\Api\PurchaseStatusController@update  |                |               |
|        | PATCH v1/api/purchaseStatus/{purchaseStatus}         |                               | Goros6\Purchases\Controllers\Api\PurchaseStatusController@update  |                |               |
|        | DELETE v1/api/purchaseStatus/{purchaseStatus}        | v1.api.purchaseStatus.destroy | Goros6\Purchases\Controllers\Api\PurchaseStatusController@destroy |                |               |
+--------+------------------------------------------------------+-------------------------------+-------------------------------------------------------------------+----------------+---------------+

Видим, что Laravel автоматически генерирует доступ к ресурсу "статус заявки".

Реализуем ресурс создания нового статуса:

  • Из списка роутов смотрим на store (v1.api.purchaseStatus.store).
  • Создадим класс, который нужен роуту:
    • Goros6\Purchases\Controllers\Api\PurchaseStatusController@store
    • namespace: Goros6\Purchases\Controllers\Api.
  • Создадим в нем метод, который указан в списке роутов
    • Purchases\Api\PurchaseStatusController@store
  • Выведем все параметры, которые в этот метод приходят.

image

PSR-4

Чтобы класс PurchaseStatusController был доступен для автозагрузки, необходимо добавить наш неймспейс в композер в соответствии со стандартом PSR-4.

image

После добавления выполняем команду composer dump-autoload, чтобы наш неймспейс зарегистрировался в автозагрузке.

Проверим как это работает:

В PhpStorm есть модуль для работы с REST, есть и другие варианты.
Но я привык к расширению к браузеру хром (Postman).
Можете посмотреть и выбрать любой удобный для себя REST-клиент.
Итак, отправляем запрос, в точности с правилами роутинга (POST-запрос на URL v1/api/purchaseStatus):

image

Это значит, что мы отправляем запрос методом POST на URL http://purchases.dev:8000/v1/api/purchaseStatus в формате JSON. А сервер видит (и выводит) то, что мы отправили.

Создание модели и так далее

Далее необходимо

  • создать модель PurchaseStatus
    • разместить в директории app/models/ и
    • в namespace Goros6\Purchases\Models
  • связать модель с таблицей в базе данных
  • написать код, в результате которого приходящие в метод store данные, будут записывать новый статус в базу данных
  • реализовать метод index согласно правилам роутинга для ресурса, который будет выдавать список статусов
  • реализовать метод view согласно правилам роутинга для ресурса, который будет выводить информацию об одном статусе.

Вопросы задавать в skype

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants