pull/596/head
n0nag0n 4 months ago
parent edcd1ad092
commit a788c8a608

@ -733,14 +733,14 @@ class Engine
* Create a resource controller customizing the methods names mapping. * Create a resource controller customizing the methods names mapping.
* *
* @param class-string $controllerClass * @param class-string $controllerClass
* @param array<string, string|array> $options * @param array<string, string|array<string>> $options
*/ */
public function _resource( public function _resource(
string $pattern, string $pattern,
string $controllerClass, string $controllerClass,
array $options = [] array $options = []
): void { ): void {
$this->router()->mapResource($pattern, $controllerClass, $options); $this->router()->mapResource($pattern, $controllerClass, $options);
} }
/** /**

@ -276,13 +276,13 @@ class Router
throw new Exception($exception_message); throw new Exception($exception_message);
} }
/** /**
* Create a resource controller customizing the methods names mapping. * Create a resource controller customizing the methods names mapping.
* *
* @param class-string $controllerClass * @param class-string $controllerClass
* @param array<string, string|array> $options * @param array<string, string|array<string>> $options
*/ */
public function mapResource( public function mapResource(
string $pattern, string $pattern,
string $controllerClass, string $controllerClass,
array $options = [] array $options = []

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
use tests\groupcompactsyntax\PostsController; use tests\groupcompactsyntax\PostsController;
use tests\groupcompactsyntax\TodosController; use tests\groupcompactsyntax\TodosController;
@ -36,7 +38,7 @@ final class FlightRouteCompactSyntaxTest extends TestCase
public function testOptionsOnly(): void public function testOptionsOnly(): void
{ {
Flight::resource('/users', UsersController::class, [ Flight::resource('/users', UsersController::class, [
'only' => [ 'index', 'destroy' ] 'only' => [ 'index', 'destroy' ]
]); ]);
$routes = Flight::router()->getRoutes(); $routes = Flight::router()->getRoutes();
@ -62,79 +64,79 @@ final class FlightRouteCompactSyntaxTest extends TestCase
$this->assertSame('/posts', $routes[0]->pattern); $this->assertSame('/posts', $routes[0]->pattern);
$this->assertSame('GET', $routes[0]->methods[0]); $this->assertSame('GET', $routes[0]->methods[0]);
$this->assertSame([PostsController::class, 'index'], $routes[0]->callback); $this->assertSame([PostsController::class, 'index'], $routes[0]->callback);
$this->assertSame('posts.index', $routes[0]->alias); $this->assertSame('posts.index', $routes[0]->alias);
$this->assertSame('/posts/create', $routes[1]->pattern); $this->assertSame('/posts/create', $routes[1]->pattern);
$this->assertSame('GET', $routes[1]->methods[0]); $this->assertSame('GET', $routes[1]->methods[0]);
$this->assertSame([PostsController::class, 'create'], $routes[1]->callback); $this->assertSame([PostsController::class, 'create'], $routes[1]->callback);
$this->assertSame('posts.create', $routes[1]->alias); $this->assertSame('posts.create', $routes[1]->alias);
$this->assertSame('/posts', $routes[2]->pattern); $this->assertSame('/posts', $routes[2]->pattern);
$this->assertSame('POST', $routes[2]->methods[0]); $this->assertSame('POST', $routes[2]->methods[0]);
$this->assertSame([PostsController::class, 'store'], $routes[2]->callback); $this->assertSame([PostsController::class, 'store'], $routes[2]->callback);
$this->assertSame('posts.store', $routes[2]->alias); $this->assertSame('posts.store', $routes[2]->alias);
$this->assertSame('/posts/@id', $routes[3]->pattern); $this->assertSame('/posts/@id', $routes[3]->pattern);
$this->assertSame('GET', $routes[3]->methods[0]); $this->assertSame('GET', $routes[3]->methods[0]);
$this->assertSame([PostsController::class, 'show'], $routes[3]->callback); $this->assertSame([PostsController::class, 'show'], $routes[3]->callback);
$this->assertSame('posts.show', $routes[3]->alias); $this->assertSame('posts.show', $routes[3]->alias);
$this->assertSame('/posts/@id/edit', $routes[4]->pattern); $this->assertSame('/posts/@id/edit', $routes[4]->pattern);
$this->assertSame('GET', $routes[4]->methods[0]); $this->assertSame('GET', $routes[4]->methods[0]);
$this->assertSame([PostsController::class, 'edit'], $routes[4]->callback); $this->assertSame([PostsController::class, 'edit'], $routes[4]->callback);
$this->assertSame('posts.edit', $routes[4]->alias); $this->assertSame('posts.edit', $routes[4]->alias);
$this->assertSame('/posts/@id', $routes[5]->pattern); $this->assertSame('/posts/@id', $routes[5]->pattern);
$this->assertSame('PUT', $routes[5]->methods[0]); $this->assertSame('PUT', $routes[5]->methods[0]);
$this->assertSame([PostsController::class, 'update'], $routes[5]->callback); $this->assertSame([PostsController::class, 'update'], $routes[5]->callback);
$this->assertSame('posts.update', $routes[5]->alias); $this->assertSame('posts.update', $routes[5]->alias);
$this->assertSame('/posts/@id', $routes[6]->pattern); $this->assertSame('/posts/@id', $routes[6]->pattern);
$this->assertSame('DELETE', $routes[6]->methods[0]); $this->assertSame('DELETE', $routes[6]->methods[0]);
$this->assertSame([PostsController::class, 'destroy'], $routes[6]->callback); $this->assertSame([PostsController::class, 'destroy'], $routes[6]->callback);
$this->assertSame('posts.destroy', $routes[6]->alias); $this->assertSame('posts.destroy', $routes[6]->alias);
} }
public function testOptionsExcept(): void public function testOptionsExcept(): void
{ {
Flight::resource('/todos', TodosController::class, [ Flight::resource('/todos', TodosController::class, [
'except' => [ 'create', 'store', 'update', 'destroy', 'edit' ] 'except' => [ 'create', 'store', 'update', 'destroy', 'edit' ]
]); ]);
$routes = Flight::router()->getRoutes(); $routes = Flight::router()->getRoutes();
$this->assertCount(2, $routes); $this->assertCount(2, $routes);
$this->assertSame('/todos', $routes[0]->pattern); $this->assertSame('/todos', $routes[0]->pattern);
$this->assertSame('GET', $routes[0]->methods[0]); $this->assertSame('GET', $routes[0]->methods[0]);
$this->assertSame([TodosController::class, 'index'], $routes[0]->callback); $this->assertSame([TodosController::class, 'index'], $routes[0]->callback);
$this->assertSame('/todos/@id', $routes[1]->pattern); $this->assertSame('/todos/@id', $routes[1]->pattern);
$this->assertSame('GET', $routes[1]->methods[0]); $this->assertSame('GET', $routes[1]->methods[0]);
$this->assertSame([TodosController::class, 'show'], $routes[1]->callback); $this->assertSame([TodosController::class, 'show'], $routes[1]->callback);
} }
public function testOptionsMiddlewareAndAliasBase(): void public function testOptionsMiddlewareAndAliasBase(): void
{ {
Flight::resource('/todos', TodosController::class, [ Flight::resource('/todos', TodosController::class, [
'middleware' => [ 'auth' ], 'middleware' => [ 'auth' ],
'alias_base' => 'nothanks' 'alias_base' => 'nothanks'
]); ]);
$routes = Flight::router()->getRoutes(); $routes = Flight::router()->getRoutes();
$this->assertCount(7, $routes); $this->assertCount(7, $routes);
$this->assertSame('/todos', $routes[0]->pattern); $this->assertSame('/todos', $routes[0]->pattern);
$this->assertSame('GET', $routes[0]->methods[0]); $this->assertSame('GET', $routes[0]->methods[0]);
$this->assertSame([TodosController::class, 'index'], $routes[0]->callback); $this->assertSame([TodosController::class, 'index'], $routes[0]->callback);
$this->assertSame('auth', $routes[0]->middleware[0]); $this->assertSame('auth', $routes[0]->middleware[0]);
$this->assertSame('nothanks.index', $routes[0]->alias); $this->assertSame('nothanks.index', $routes[0]->alias);
$this->assertSame('/todos/create', $routes[1]->pattern); $this->assertSame('/todos/create', $routes[1]->pattern);
$this->assertSame('GET', $routes[1]->methods[0]); $this->assertSame('GET', $routes[1]->methods[0]);
$this->assertSame([TodosController::class, 'create'], $routes[1]->callback); $this->assertSame([TodosController::class, 'create'], $routes[1]->callback);
$this->assertSame('auth', $routes[1]->middleware[0]); $this->assertSame('auth', $routes[1]->middleware[0]);
$this->assertSame('nothanks.create', $routes[1]->alias); $this->assertSame('nothanks.create', $routes[1]->alias);
} }
} }

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace tests\groupcompactsyntax; namespace tests\groupcompactsyntax;
final class PostsController final class PostsController

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace tests\groupcompactsyntax; namespace tests\groupcompactsyntax;
final class TodosController final class TodosController

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace tests\groupcompactsyntax; namespace tests\groupcompactsyntax;
final class UsersController final class UsersController

Loading…
Cancel
Save