ApiPlatform\Core\Util\RequestAttributesExtractor::extractAttributes PHP Method

extractAttributes() public static method

Extracts resource class, operation name and format request attributes. Throws an exception if the request does not contain required attributes.
public static extractAttributes ( Request $request ) : array
$request Symfony\Component\HttpFoundation\Request
return array
    public static function extractAttributes(Request $request)
    {
        $result = ['resource_class' => $request->attributes->get('_api_resource_class')];
        if (null === $result['resource_class']) {
            throw new RuntimeException('The request attribute "_api_resource_class" must be defined.');
        }
        $collectionOperationName = $request->attributes->get('_api_collection_operation_name');
        $itemOperationName = $request->attributes->get('_api_item_operation_name');
        if ($collectionOperationName) {
            $result['collection_operation_name'] = $collectionOperationName;
        } elseif ($itemOperationName) {
            $result['item_operation_name'] = $itemOperationName;
        } else {
            throw new RuntimeException('One of the request attribute "_api_collection_operation_name" or "_api_item_operation_name" must be defined.');
        }
        return $result;
    }

Usage Example

コード例 #1
0
ファイル: ValidateListener.php プロジェクト: soyuka/core
 /**
  * Validates data returned by the controller if applicable.
  *
  * @param GetResponseForControllerResultEvent $event
  *
  * @throws ValidationException
  */
 public function onKernelView(GetResponseForControllerResultEvent $event)
 {
     $request = $event->getRequest();
     try {
         $attributes = RequestAttributesExtractor::extractAttributes($request);
     } catch (RuntimeException $e) {
         return;
     }
     if ($request->isMethodSafe() || $request->isMethod(Request::METHOD_DELETE)) {
         return;
     }
     $data = $event->getControllerResult();
     $resourceMetadata = $this->resourceMetadataFactory->create($attributes['resource_class']);
     if (isset($attributes['collection_operation_name'])) {
         $validationGroups = $resourceMetadata->getCollectionOperationAttribute($attributes['collection_operation_name'], 'validation_groups');
     } else {
         $validationGroups = $resourceMetadata->getItemOperationAttribute($attributes['item_operation_name'], 'validation_groups');
     }
     if (!$validationGroups) {
         // Fallback to the resource
         $validationGroups = $resourceMetadata->getAttributes()['validation_groups'] ?? null;
     }
     if (is_callable($validationGroups)) {
         $validationGroups = call_user_func_array($validationGroups, [$data]);
     }
     $violations = $this->validator->validate($data, null, $validationGroups);
     if (0 !== count($violations)) {
         throw new ValidationException($violations);
     }
 }
All Usage Examples Of ApiPlatform\Core\Util\RequestAttributesExtractor::extractAttributes
RequestAttributesExtractor