/** * Permet de définir des groupes de routes pour ne pas * avoir à recopier certaines parties de la route * * @param string|array $options * @param callable $callback */ public function group($options, callable $callback) { $groupOptions = ['prefix' => '', 'middlewares' => []]; if (is_string($options)) { $groupOptions['prefix'] = $options; } else { $groupOptions = array_merge($groupOptions, $options); } $this->groups->add($groupOptions['prefix'], $groupOptions['middlewares']); $callback($this); $this->groups->remove(); }
/** * Test l'ajout, la suppression et la génération des éléments */ public function testLinkedList() { $test = new RouteGroup(); // Add prefix and empty middleware $test->add('/news', []); $this->assertEquals('news/', $test->prefix); $this->assertCount(0, $test->middlewares); // Add empty prefix and middleware with value $test->add('', ['auth' => true]); $this->assertEquals('news/', $test->prefix); $this->assertCount(1, $test->middlewares); $this->assertSame(true, $test->middlewares['auth']); // Add prefix and simple middleware $test->add('/news', ['salut']); $this->assertEquals('news/news/', $test->prefix); $this->assertCount(2, $test->middlewares); $this->assertSame('salut', $test->middlewares['salut']); // Add prefix and name middleware with same back value $test->add('/admin', ['salut' => 'ca va']); $this->assertEquals('news/news/admin/', $test->prefix); $this->assertSame('ca va', $test->middlewares['salut']); $this->assertCount(2, $test->middlewares); // On retire les éléments $test->remove(); $this->assertEquals('news/news/', $test->prefix); $this->assertCount(2, $test->middlewares); $this->assertSame('salut', $test->middlewares['salut']); $test->remove(); $this->assertEquals('news/', $test->prefix); $this->assertCount(1, $test->middlewares); $this->assertSame(true, $test->middlewares['auth']); $test->remove(); $this->assertEquals('news/', $test->prefix); $this->assertCount(0, $test->middlewares); $test->remove(); $this->assertEquals('', $test->prefix); $this->assertCount(0, $test->middlewares); }