Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
vendor/
composer.lock
.phpunit.cache/
.idea/
4 changes: 3 additions & 1 deletion src/Http/Controllers/Actions/AttachRelationship.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
use LaravelJsonApi\Contracts\Routing\Route;
use LaravelJsonApi\Contracts\Store\Store as StoreContract;
use LaravelJsonApi\Core\Support\Str;
use LaravelJsonApi\Laravel\Http\Requests\RequestMethod;
use LaravelJsonApi\Laravel\Http\Requests\ResourceQuery;
use LaravelJsonApi\Laravel\Http\Requests\ResourceRequest;
use LogicException;
Expand All @@ -41,7 +42,8 @@ public function attachRelationship(Route $route, StoreContract $store)
}

$request = ResourceRequest::forResource(
$resourceType = $route->resourceType()
$resourceType = $route->resourceType(),
RequestMethod::ATTACH_RELATIONSHIP
);

$query = ResourceQuery::queryMany($relation->inverse());
Expand Down
4 changes: 3 additions & 1 deletion src/Http/Controllers/Actions/DetachRelationship.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
use LaravelJsonApi\Contracts\Routing\Route;
use LaravelJsonApi\Contracts\Store\Store as StoreContract;
use LaravelJsonApi\Core\Support\Str;
use LaravelJsonApi\Laravel\Http\Requests\RequestMethod;
use LaravelJsonApi\Laravel\Http\Requests\ResourceQuery;
use LaravelJsonApi\Laravel\Http\Requests\ResourceRequest;
use LogicException;
Expand All @@ -41,7 +42,8 @@ public function detachRelationship(Route $route, StoreContract $store)
}

$request = ResourceRequest::forResource(
$resourceType = $route->resourceType()
$resourceType = $route->resourceType(),
RequestMethod::DETACH_RELATIONSHIP
);

$query = ResourceQuery::queryMany($relation->inverse());
Expand Down
4 changes: 3 additions & 1 deletion src/Http/Controllers/Actions/Store.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
use LaravelJsonApi\Contracts\Routing\Route;
use LaravelJsonApi\Contracts\Store\Store as StoreContract;
use LaravelJsonApi\Core\Responses\DataResponse;
use LaravelJsonApi\Laravel\Http\Requests\RequestMethod;
use LaravelJsonApi\Laravel\Http\Requests\ResourceQuery;
use LaravelJsonApi\Laravel\Http\Requests\ResourceRequest;

Expand All @@ -32,7 +33,8 @@ trait Store
public function store(Route $route, StoreContract $store)
{
$request = ResourceRequest::forResource(
$resourceType = $route->resourceType()
$resourceType = $route->resourceType(),
RequestMethod::STORE
);

$query = ResourceQuery::queryOne($resourceType);
Expand Down
4 changes: 3 additions & 1 deletion src/Http/Controllers/Actions/Update.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
use LaravelJsonApi\Contracts\Routing\Route;
use LaravelJsonApi\Contracts\Store\Store as StoreContract;
use LaravelJsonApi\Core\Responses\DataResponse;
use LaravelJsonApi\Laravel\Http\Requests\RequestMethod;
use LaravelJsonApi\Laravel\Http\Requests\ResourceQuery;
use LaravelJsonApi\Laravel\Http\Requests\ResourceRequest;

Expand All @@ -32,7 +33,8 @@ trait Update
public function update(Route $route, StoreContract $store)
{
$request = ResourceRequest::forResource(
$resourceType = $route->resourceType()
$resourceType = $route->resourceType(),
RequestMethod::UPDATE
);

$query = ResourceQuery::queryOne($resourceType);
Expand Down
4 changes: 3 additions & 1 deletion src/Http/Controllers/Actions/UpdateRelationship.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
use LaravelJsonApi\Contracts\Store\Store as StoreContract;
use LaravelJsonApi\Core\Responses\RelationshipResponse;
use LaravelJsonApi\Core\Support\Str;
use LaravelJsonApi\Laravel\Http\Requests\RequestMethod;
use LaravelJsonApi\Laravel\Http\Requests\ResourceQuery;
use LaravelJsonApi\Laravel\Http\Requests\ResourceRequest;

Expand All @@ -37,7 +38,8 @@ public function updateRelationship(Route $route, StoreContract $store)
->relationship($fieldName = $route->fieldName());

$request = ResourceRequest::forResource(
$resourceType = $route->resourceType()
$resourceType = $route->resourceType(),
RequestMethod::UPDATE_RELATIONSHIP
);

$query = $relation->toOne() ?
Expand Down
15 changes: 15 additions & 0 deletions src/Http/Requests/RequestMethod.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace LaravelJsonApi\Laravel\Http\Requests;

/**
* Enum representing different types of request methods.
*/
enum RequestMethod: string
{
case ATTACH_RELATIONSHIP = 'AttachRelationship';
case DETACH_RELATIONSHIP = 'DetachRelationship';
case UPDATE_RELATIONSHIP = 'UpdateRelationship';
case STORE = 'Create';
case UPDATE = 'Update';
}
10 changes: 9 additions & 1 deletion src/Http/Requests/RequestResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,16 +81,24 @@ public function __construct(string $type)
/**
* @param string $resourceType
* @param bool $allowNull whether null can be returned for non-existent classes.
* @param RequestMethod|null $requestMethod
* @return FormRequest|null
*/
public function __invoke(string $resourceType, bool $allowNull = false): ?FormRequest
public function __invoke(string $resourceType, bool $allowNull = false, RequestMethod $requestMethod = null): ?FormRequest
{
$app = app();

$fqn = $this->custom($resourceType) ?: Str::replaceLast('Schema', $this->type, get_class(
$app->make(SchemaContainer::class)->schemaFor($resourceType)
));

if ($requestMethod) {
$requestFqn = Str::replaceLast($resourceType, $requestMethod->value . $resourceType, $fqn);
if (class_exists($requestFqn) || $app->bound($requestFqn)) {
$fqn = $requestFqn;
}
}

if (!class_exists($fqn) && !$app->bound($fqn)) {
if (true === $allowNull) {
return null;
Expand Down
6 changes: 4 additions & 2 deletions src/Http/Requests/ResourceRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

namespace LaravelJsonApi\Laravel\Http\Requests;

use Illuminate\Contracts\Container\BindingResolutionException;
use Illuminate\Contracts\Validation\Factory as ValidationFactory;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Database\Eloquent\Model;
Expand Down Expand Up @@ -62,13 +63,14 @@ public static function guessResourceRequestUsing(callable $resolver): void
* Resolve the request instance for the specified resource type.
*
* @param string $resourceType
* @param RequestMethod|null $requestMethod
* @return ResourceRequest
*/
public static function forResource(string $resourceType): ResourceRequest
public static function forResource(string $resourceType, RequestMethod $requestMethod = null): ResourceRequest
{
$resolver = self::$requestResolver ?: new RequestResolver(RequestResolver::REQUEST);

return $resolver($resourceType);
return $resolver($resourceType, false, $requestMethod);
}

/**
Expand Down