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

feat(laravel): laravel component #5882

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from
Draft

Conversation

soyuka
Copy link
Member

@soyuka soyuka commented Oct 12, 2023

Laravel support in API Platform

TODO:

Note that this is still in development there are a few things missing (notably tests \o/).

To try this:

  1. create a laravel project:
composer create-project laravel/laravel my-api
  1. update your composer.json with:
    "repositories": [
        {
            "type": "path",
            "url": "/path/to/core/src/Laravel"
        }
    ]
}
  1. composer update, I added #[ApiResource] on the model and change the Exception\Handler to use ApiPlatform\Laravel\Exception\Handler.

There are many things left tbd (filters, pagination, graphql etc).

@kilwir76
Copy link

not working for the moment.
I haven't package api-platform who install after create project laravel and change composer.json

Co-authored-by: romainallanot <romain@llanot.com>
Copy link

stale bot commented Jan 6, 2024

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@stale stale bot added the stale label Jan 6, 2024
@dunglas dunglas removed the stale label Jan 7, 2024
@JustSteveKing
Copy link

Is there a specific way that we need to add serialization support for other types other than jsonld? I tried both jsonapi and jsonhal and get the following trace:

[2024-04-26 20:34:38] local.ERROR: Serialization for the format "jsonapi" is not supported. {"exception":"[object] (Symfony\\Component\\Serializer\\Exception\\UnsupportedFormatException(code: 0): Serialization for the format \"jsonapi\" is not supported. at /Users/steve/Herd/laravel-api-platform/vendor/symfony/serializer/Serializer.php:134)
[stacktrace]
#0 /Users/steve/Herd/core/src/State/Processor/SerializeProcessor.php(65): Symfony\\Component\\Serializer\\Serializer->serialize(Object(ApiPlatform\\Laravel\\Eloquent\\Paginator), 'jsonapi', Array)
#1 /Users/steve/Herd/core/src/State/Processor/WriteProcessor.php(42): ApiPlatform\\State\\Processor\\SerializeProcessor->process(Object(ApiPlatform\\Laravel\\Eloquent\\Paginator), Object(ApiPlatform\\Metadata\\GetCollection), Array, Array)
#2 /Users/steve/Herd/core/src/Hydra/State/HydraLinkProcessor.php(52): ApiPlatform\\State\\Processor\\WriteProcessor->process(Object(ApiPlatform\\Laravel\\Eloquent\\Paginator), Object(ApiPlatform\\Metadata\\GetCollection), Array, Array)
#3 /Users/steve/Herd/core/src/Laravel/Controller/ApiPlatformController.php(90): ApiPlatform\\Hydra\\State\\HydraLinkProcessor->process(Object(ApiPlatform\\Laravel\\Eloquent\\Paginator), Object(ApiPlatform\\Metadata\\GetCollection), Array, Array)
#4 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): ApiPlatform\\Laravel\\Controller\\ApiPlatformController->__invoke(Object(Illuminate\\Http\\Request))
#5 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction('__invoke', Array)
#6 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(ApiPlatform\\Laravel\\Controller\\ApiPlatformController), '__invoke')
#7 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
#8 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run()
#9 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#10 /Users/steve/Herd/core/src/Laravel/ApiPlatformMiddleware.php(38): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#11 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): ApiPlatform\\Laravel\\ApiPlatformMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure), '_api_/api/books...')
#12 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#13 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#14 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#15 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#16 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#17 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#18 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#19 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#20 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#21 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#22 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#28 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(62): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#35 /Users/steve/Herd/laravel-api-platform/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#36 /Users/steve/Herd/laravel-api-platform/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#37 /Applications/Herd.app/Contents/Resources/valet/server.php(151): require('/Users/steve/He...')
#38 {main}
"} 

@soyuka
Copy link
Member Author

soyuka commented Apr 27, 2024

https://github.com/api-platform/core/pull/5882/files#diff-1f34d8685c9bbcc2037ef47c41cb6dac916a0fe6fc06e2047b9635e35fa13527R396 it's missing jsonapi/hal normalizers indeed.

@JustSteveKing
Copy link

https://github.com/api-platform/core/pull/5882/files#diff-1f34d8685c9bbcc2037ef47c41cb6dac916a0fe6fc06e2047b9635e35fa13527R396 it's missing jsonapi/hal normalizers indeed.

I assume you know how to do this? I am still getting up to speed with some of these things!

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

Successfully merging this pull request may close these issues.

None yet

4 participants