-
-
Notifications
You must be signed in to change notification settings - Fork 2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
1.3.0: Bugs in href Phalcon\Mvc\Url or Phalcon\Mvc\Router #1938
Comments
Можешь вытащить бранч router из моего репозитория и проверить? Я откатил там проблемный коммит. |
@sjinks ок, проверю |
@sjinks намного лучше. Осталась лишь проблема с обрезанием ссылок. <?php
$di = new Phalcon\DI\FactoryDefault();
$di['url'] = function () {
$url = new Phalcon\Mvc\Url();
$url->setBasePath('/example/');
return $url;
};
$router = new Phalcon\Mvc\Router();
$router->add('test/')->setName('test-00');
$router->add('test/{id}')->setName('test-0');
class TestRoute extends Phalcon\Mvc\Router\Group
{
public function initialize()
{
$this->setPrefix('/test-class/');
$this->add('test/{id:\d}')->setName('test-5');
}
}
class TestRoute2 extends Phalcon\Mvc\Router\Group
{
public function initialize()
{
$this->add('test/{id:\d}')->setName('test-6');
}
}
$router->mount(new TestRoute);
$router->mount(new TestRoute2);
$di['router'] = $router;
echo '0: ' . $di['url']->get(['for' => 'test-00']) . '<br />';
echo '1: ' . $di['url']->get(['for' => 'test-0', 'id' => 'none']) . '<br />';
echo '2: ' . $di['url']->get(['for' => 'test-0']) . '<br />';
echo '3: ' . $di['url']->get(['for' => 'test-5', 'id' => 1]) . '<br />';
echo '4: ' . $di['url']->get(['for' => 'test-5']) . '<br />';
echo '5: ' . $di['url']->get(['for' => 'test-6', 'id' => 1]) . '<br />';
echo '6: ' . $di['url']->get(['for' => 'test-6']) . '<br />'; Результат:
PS. Может подскажешь как оформить это в нормальные тесты? Покрыл бы тогда весь роутинг проверками ;) |
Самый простой способ — с использованием PHPT (http://qa.php.net/phpt_details.php) Тест будет выглядеть примерно так: --TEST--
Router test
--SKIPIF--
<?php include('skipif.inc'); ?>
--FILE--
<?php
$di = new Phalcon\DI\FactoryDefault();
$di['url'] = function () {
$url = new Phalcon\Mvc\Url();
$url->setBasePath('/example/');
return $url;
};
$router = new Phalcon\Mvc\Router();
$router->add('test/')->setName('test-00');
$router->add('test/{id}')->setName('test-0');
class TestRoute extends Phalcon\Mvc\Router\Group
{
public function initialize()
{
$this->setPrefix('/test-class/');
$this->add('test/{id:\d}')->setName('test-5');
}
}
class TestRoute2 extends Phalcon\Mvc\Router\Group
{
public function initialize()
{
$this->add('test/{id:\d}')->setName('test-6');
}
}
$router->mount(new TestRoute);
$router->mount(new TestRoute2);
$di['router'] = $router;
echo $di['url']->get(array('for' => 'test-00')), PHP_EOL;
echo $di['url']->get(array('for' => 'test-0', 'id' => 'none')), PHP_EOL;
echo $di['url']->get(array('for' => 'test-0')), PHP_EOL;
echo $di['url']->get(array('for' => 'test-5', 'id' => 1)), PHP_EOL;
echo $di['url']->get(array('for' => 'test-5')), PHP_EOL;
echo $di['url']->get(array('for' => 'test-6', 'id' => 1)), PHP_EOL;
echo $di['url']->get(array('for' => 'test-6')), PHP_EOL;
?>
--EXPECT--
/test/
/test/none
/test/
/test-class/test/1
/test-class/test/
/test/1
/test/ |
Грубо говоря, то, что находится под Тест кладётся в папку ext/tests, расширение у него должно быть Запуск тестов — из ext/: NO_INTERACTION=1 make test |
Тут фигня всплыла: https://github.com/phalcon/cphalcon/blob/1.3.0/ext/kernel/framework/router.c#L175 Грубо говоря, Url::get() ожидает, что маршрут всегда начинается со слэша. То есть: -$this->add('test/{id:\d}')->setName('test-5');
+$this->add('/test/{id:\d}')->setName('test-5'); В случае с setPrefix у префикса есть ведущий слэш, поэтому всё пушисто. |
Обновил свой бранч:
|
Про слеш и тесты понял, замучу. |
Can this one be closed? |
Yes |
Example:
Results:
The text was updated successfully, but these errors were encountered: