Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 26.07.2013 18:46:23

[L3/L4] Как лучше организовать RESTful API?

Добрый день.

Суть:
Одна модель, два «типа» API. User API и Agent API

site.ru/api/user/v1/book — пример обращение к API юзеров
site.ru/api/agent/v1/book — пример обращение к API агентов

Так как модель общая, то вся работа с API организовывается с помощью контроллеров ресурсов.

Хотелось бы иметь такую структуру папок:

controllers
    -user
        -v1
            BookController.php
    -agent
        -v1
            BookController.php

А роутер такого вида:

PHP
Route::group(array('prefix' => 'api/user/v1',), function()
{
    
Route::resource('book''user.v1.BookController');
});


Route::group(array('prefix' => 'api/agent/v1',), function()
{
    
Route::resource('book''agent.v1.BookController');
});

Насколько я понял, в laravel 4 нет вложенных контроллеров.

Как это лучше реализовать? Я новичок здесь.

Изменено tktl (26.07.2013 19:11:47)

Не в сети

#2 27.07.2013 13:35:23

Cheshirrski
masterМастер
Откуда: Днепр
Сообщений: 116
Статей: 2

Re: [L3/L4] Как лучше организовать RESTful API?

Для реализации вложенных контролеров можно в файл /vendor/composer/autoload_classmap.php добавить свои базовые контроллеры.
Пример:

PHP
<?php
/// vendor/composer/autoload_classmap.php
// autoload_classmap.php generated by Composer

$vendorDir dirname(dirname(__FILE__));
$baseDir dirname($vendorDir);

return array(
    
'UserBaseController' => $baseDir '/app/controllers/UserBaseController.php'//базовый класс для User
    
'AgentBaseController' => $baseDir '/app/controllers/AgentBaseController.php'//базовый класс для Agent
    
'DatabaseSeeder' => $baseDir '/app/database/seeds/DatabaseSeeder.php',
    
'HomeController' => $baseDir '/app/controllers/HomeController.php',
    
'IlluminateQueueClosure' => $vendorDir '/laravel/framework/src/Illuminate/Queue/IlluminateQueueClosure.php',
    
'SessionHandlerInterface' => $vendorDir '/symfony/http-foundation/Symfony/Component/HttpFoundation/Resources/stubs/SessionHandlerInterface.php',
    
'TestCase' => $baseDir '/app/tests/TestCase.php',
    
'User' => $baseDir '/app/models/User.php',
);

Котроллеры:

PHP
<?php
// app/controllers/AgentBaseController.php

class AgentBaseController extends Controller {

    protected function 
setupLayout()
    {
        if ( ! 
is_null($this->layout))
        {
            
$this->layout View::make($this->layout);
        }
    }

}
// end file

<?php
// app/controllers/UserBaseController.php

class UserBaseController extends Controller {

    protected function 
setupLayout()
    {
        if ( ! 
is_null($this->layout))
        {
            
$this->layout View::make($this->layout);
        }
    }

}
//end file

<?php
// app/controllers/UserBookController.php

class UserBookController extends UserBaseController {

}
//end file

<?php
// app/controllers/AgentBookController.php

class AgentBookController extends AgentBaseController {

}
//end file

Роуты строите как обычно.

Изменено Cheshirrski (27.07.2013 14:09:50)

Не в сети

#3 27.07.2013 13:40:56

Cheshirrski
masterМастер
Откуда: Днепр
Сообщений: 116
Статей: 2

Re: [L3/L4] Как лучше организовать RESTful API?

На всякий случай — в L3 это работает тоже, но базовые контроллеры прописывать в application/start.php, в PHPAutoloader::map

Не в сети

#4 27.07.2013 14:29:40

Re: [L3/L4] Как лучше организовать RESTful API?

Спасибо.
Красивое решение.
Вчера надо было срочно выкатить api для теста фронтэнда.
Сделал через namespaces.

Перепишу с Вашим решением. big_smile

Не в сети

#5 17.08.2013 13:02:42

Cheshirrski
masterМастер
Откуда: Днепр
Сообщений: 116
Статей: 2

Re: [L3/L4] Как лучше организовать RESTful API?

Оказывается, в L4 можно запустить команду "php artisan optimize", и все контроллеры пропишутся сами.

Не в сети

Подвал раздела