1. Go to this page and download the library: Download awtyklo/carve-api library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
awtyklo / carve-api example snippets
namespace App;
use Carve\ApiBundle\ModelDescriber\FormModelDescriber;
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Kernel as BaseKernel;
class Kernel extends BaseKernel implements CompilerPassInterface
{
use MicroKernelTrait;
public function process(ContainerBuilder $container): void
{
$formModelDescriberService = $container->getDefinition('nelmio_api_doc.model_describers.form');
$formModelDescriberService->setClass(FormModelDescriber::class);
}
}
#[Rest\Post('/batch/disable')]
// TODO Rest API docs
public function batchDisableAction(Request $request)
{
$process = function (Device $device) {
$device->setEnabled(false);
};
return $this->handleBatchForm($process, $request);
}
use Carve\ApiBundle\Model\BatchResult;
use Carve\ApiBundle\Enum\BatchResultStatus;
$process = function (Device $device) {
$device->setEnabled(false);
// Your logic
if (true) {
return new BatchResult($device, BatchResultStatus::SKIPPED, 'batch.device.variableDelete.skipped.missing');
}
};
declare(strict_types=1);
namespace App\Form;
use Carve\ApiBundle\Form\BatchQueryType;
use Carve\ApiBundle\Validator\Constraints\NotBlank;
use Symfony\Component\Form\FormBuilderInterface;
class BatchVariableDeleteType extends BatchQueryType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder->add('name', null, ['mapped' => false, 'constraints' => [
new NotBlank(),
]]);
}
}
#[Rest\Post('/batch/variable/delete')]
// TODO Rest API docs
public function batchVariableDeleteAction(Request $request)
{
$process = function (Device $device, FormInterface $form) {
$name = $form->get('name')->getData();
// My custom logic
};
return $this->handleBatchForm($process, $request, DeviceDeny::VARIABLE_DELETE, null, BatchVariableDeleteType::class);
}
/**
* Callable $process has following definition:
* ($object, FormInterface $form): ?BatchResult.
* Empty result from $process will be populated with getDefaultBatchProcessEmptyResult().
* By default it will be BatchResult with success status.
*
* Callable $postProcess has following definition:
* (array $objects, FormInterface $form): void.
*/
use Carve\ApiBundle\View\ExportCsvView;
use Carve\ApiBundle\Model\ExportQueryField;
// ...
public function customExportAction()
{
$results = $this->getRepository(Task::class)->findAll();
$fields = [];
// fields will most likely come from a POST request
$field = new ExportQueryField();
// What field should be
/**
* Source type (upload or external url).
*/
#[ExportEnumPrefix('enum.common.sourceType.')]
#[ORM\Column(type: Types::STRING, enumType: SourceType::class)]
private ?SourceType $sourceType = null;
#[Api\Summary('Get {{ subjectLower }} by ID')]
public function getAction(int $id)
#[Api\ParameterPathId('ID of {{ subjectLower }} to return')]
public function getAction(int $id)
#[Api\Parameter(name: 'serialNumber', in: 'path', schema: new OA\Schema(type: 'string'), description: 'The serial number of {{ subjectLower }} to return')]
public function getAction(string $serialNumber)
#[Api\RequestBody(description: 'New data for {{ subjectTitle }}', content: new NA\Model(type: Order::class))]
public function editAction()
use Nelmio\ApiDocBundle\Annotation as NA;
#[Api\RequestBodyBatch(content: new NA\Model(type: BatchVariableAddType::class))]
public function batchVariableAddAction()
use Nelmio\ApiDocBundle\Annotation as NA;
#[Api\Response200(description: 'Returns public configuration for application', content: new NA\Model(type: PublicConfiguration::class))]
public function getAction()
use Nelmio\ApiDocBundle\Annotation as NA;
#[Rest\View(serializerGroups: ['public:configuration'])]
#[Api\Response200Groups(description: 'Returns public configuration for application', content: new NA\Model(type: PublicConfiguration::class))]
public function getAction()
use Nelmio\ApiDocBundle\Annotation as NA;
#[Rest\View(serializerGroups: ['public:configuration'])]
class AnonymousController extends AbstractApiController
{
#[Api\Response200Groups(description: 'Returns public configuration for application', content: new NA\Model(type: PublicConfiguration::class))]
public function getAction()
}
#[Api\Response200SubjectGroups('Returns created {{ subjectLower }}')]
public function createAction(Request $request)
#[Api\Response200List('Returns list of {{ subjectPluralLower }}')]
public function listAction(Request $request)
#[Api\Response204('{{ subjectTitle }} successfully enabled')]
public function enableAction()
#[Api\Response404('{{ subjectTitle }} with specified serial number not found')]
public function getAction()
use Carve\ApiBundle\Attribute as Api;
use Nelmio\ApiDocBundle\Annotation as NA;
#[Rest\Post('/change/password')]
#[Api\Summary('Change authenticated user password')]
#[Api\Response204('Password successfully changed')]
#[Api\RequestBody(content: new NA\Model(type: AuthenticatedChangePasswordType::class))]
#[Api\Response400]
public function changePasswordAction(Request $request)
use Carve\ApiBundle\Attribute as Api;
use Nelmio\ApiDocBundle\Annotation as NA;
#[Rest\Post('/change/password/d when authenticated user roles pdated authentication data', content: new NA\Model(type: AuthenticationData::class))]
#[Api\Response400]
use Carve\ApiBundle\Attribute as Api;
#[Rest\Get('/token/extend/{refreshTokenString}')]
#[Api\Summary('Extend refresh token for another access token TTL')]
#[Api\Response204('Correct refresh token extended successfully')]
#[Api\Parameter(in: 'path', name: 'refreshTokenString', description: 'Refresh token string')]
public function extendAction(string $refreshTokenString)
use Carve\ApiBundle\Attribute as Api;
use Nelmio\ApiDocBundle\Annotation as NA;
#[Rest\Post('/batch/variable/add')]
#[Api\Summary('Add variable to multiple {{ subjectPluralLower }}')]
#[Api\RequestBodyBatch(content: new NA\Model(type: BatchVariableAddType::class))]
#[Api\Response200BatchResults]
#[Api\Response400]
public function batchVariableAddAction(Request $request)
use OpenApi\Attributes as OA;
#[Api\Response200(
description: 'Progress',
content: new OA\JsonContent(
type: 'object',
properties: [
new OA\Property(property: 'total', type: 'integer'),
new OA\Property(property: 'pending', type: 'integer'),
]
),
)]
public function progressAction(int $id)
class OptionsController extends AbstractApiController
{
#[Rest\Get('/users')]
#[Api\Summary('Get users')]
#[Api\Response200ArraySubjectGroups(User::class)]
public function usersAction()
{
return $this->getRepository(User::class)->findAll();
}
}
php vendor/bin/phpunit --version
php vendor/bin/phpunit
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.