Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Суть:
Одна модель, два «типа» 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
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)
Не в сети
Для реализации вложенных контролеров можно в файл /vendor/composer/autoload_classmap.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
// 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)
Не в сети
Не в сети
Спасибо.
Красивое решение.
Вчера надо было срочно выкатить api для теста фронтэнда.
Сделал через namespaces.
Перепишу с Вашим решением.
Не в сети
Оказывается, в L4 можно запустить команду "php artisan optimize", и все контроллеры пропишутся сами.
Не в сети
Страницы 1