На основе документации от здесь , здесь , здесь и регистрации Router.php Я пришел к мысли написать ответ,
Попробуйте выполнить следующие действия:
1) Создать Маршрутизация папка внутри app Папка
Создать макросы :
2) app \ Routing \ ApiReadResource.php с таким содержимым:
<?php
namespace App\Routing
use Illuminate\Routing\Router;
class ApiReadResource
{
public static function register()
{
if (!Router::hasMacro('apiReadResource')) {
Router::macro('apiReadResource', function ($name, $controller, $options = []) {
Router::resource(
$name,
$controller,
array_merge(['only' => ['index', 'show']], $options)
);
});
}
}
}
3) app \ Routing \ ApiWriteResource.php с таким содержанием:
<?php
namespace App\Routing
use Illuminate\Routing\Router;
class ApiWriteResource
{
public static function register()
{
if (!Router::hasMacro('apiWriteResource')) {
Router::macro('apiWriteResource', function ($name, $controller, $options = []) {
Router::resource(
$name,
$controller,
array_merge(['except' => ['index', 'show', 'edit', 'create', 'destroy']], $options)
);
});
}
}
}
4) app \ Routing \ ApiRelationshipResources.php с таким содержанием:
<?php
namespace App\Routing
use Illuminate\Routing\Router;
class ApiRelationshipResources
{
public static function register()
{
if (!Router::hasMacro('apiRelationshipResources')) {
Router::macro('apiRelationshipResources', function ($name, $controller, array $relationships, $options = []) {
foreach($relationships AS $relationship) {
Router::get(
$name.'/{id}/'.$relationship,
array_merge($options, [
'uses' => $controller . '@' . $relationship,
'as' => $name . '.' . $relationship,
])
);
}
});
}
}
}
5) Зарегистрируйте их внутри AppServiceProvider :
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
\App\Routing\ApiReadResource::register();
\App\Routing\ApiWriteResource::register();
\App\Routing\ApiRelationshipResources::register();
}
}