Для чего UrlRule::$pattern и UrlRule::$route ?
Для чего UrlRule::$pattern и UrlRule::$route ?
Добрый день !
Собственно вопрос в теме. В первом yii без проблем можно было создать своё правило, сейчас не могу понять для чего эти 2 параметра.
"От балды" их ставить как-то не хочется, хотя пока придется...
Буду рад, если кто-то прояснит ситуацию.
Собственно вопрос в теме. В первом yii без проблем можно было создать своё правило, сейчас не могу понять для чего эти 2 параметра.
"От балды" их ставить как-то не хочется, хотя пока придется...
Буду рад, если кто-то прояснит ситуацию.
Re: Для чего UrlRule::$pattern и UrlRule::$route ?
слова pattern и route что-то говорят вам? документацию читали? phpdoc смотрели?
В чем загвоздка?
В чем загвоздка?
Re: Для чего UrlRule::$pattern и UrlRule::$route ?
Разобрался.
Я прекрасно вижу по коду зачем они используются по-умолчанию, но для чего они мне в пользовательском классе было не понятно.
Теперь убедился, что вообще ни к чему.
Неожидал просто в yii увидеть что-то ненужное.
Я прекрасно вижу по коду зачем они используются по-умолчанию, но для чего они мне в пользовательском классе было не понятно.
Теперь убедился, что вообще ни к чему.
Неожидал просто в yii увидеть что-то ненужное.
Re: Для чего UrlRule::$pattern и UrlRule::$route ?
Если вам не нужно - это не значит, что не нужно другим
Re: Для чего UrlRule::$pattern и UrlRule::$route ?
Раскажите, пожалуйста, как их применять можно в пользовательских классах правил ?
Потому что я не могу уловить суть этого нововведения.
Если в них забивать по такому же принципу путь и паттерн, как в правило по-умолчанию, то для этого всегда можно было в пользовательском классе создать свои свойства. Но вот, когда они реально не нужны там, приходится их перекрывать просто "мусором", что на мой взгляд избыточно и несколько не правильно с точки зрения философии yii. Этот фреймворк берет своей прозрачностью и простотой, наряду с гибкостью, скоростью и качеством. Но для тех, кто начинает с ним разбираться, подобные вещи выглядят, как что-то "сырое" в этом фреймворке и впечатление конечно может подпортиться.
Потому что я не могу уловить суть этого нововведения.
Если в них забивать по такому же принципу путь и паттерн, как в правило по-умолчанию, то для этого всегда можно было в пользовательском классе создать свои свойства. Но вот, когда они реально не нужны там, приходится их перекрывать просто "мусором", что на мой взгляд избыточно и несколько не правильно с точки зрения философии yii. Этот фреймворк берет своей прозрачностью и простотой, наряду с гибкостью, скоростью и качеством. Но для тех, кто начинает с ним разбираться, подобные вещи выглядят, как что-то "сырое" в этом фреймворке и впечатление конечно может подпортиться.
Re: Для чего UrlRule::$pattern и UrlRule::$route ?
не очень понимаю какое может быть правило без паттерна или роута, приведите пример
Re: Для чего UrlRule::$pattern и UrlRule::$route ?
причем здесь нововведение?IvanChe писал(а):Раскажите, пожалуйста, как их применять можно в пользовательских классах правил ?
Потому что я не могу уловить суть этого нововведения.
Если в них забивать по такому же принципу путь и паттерн, как в правило по-умолчанию, то для этого всегда можно было в пользовательском классе создать свои свойства. Но вот, когда они реально не нужны там, приходится их перекрывать просто "мусором", что на мой взгляд избыточно и несколько не правильно с точки зрения философии yii. Этот фреймворк берет своей прозрачностью и простотой, наряду с гибкостью, скоростью и качеством. Но для тех, кто начинает с ним разбираться, подобные вещи выглядят, как что-то "сырое" в этом фреймворке и впечатление конечно может подпортиться.
UrlManager должен найти необходимый роут. Берутся все правила и перебором по очереди проверяются соответствию паттерну. Если соответствует, то формируется урл на основе роута.
Если вы загляните в UrlRule:init(), то заметите первые две проверки на нулевые паттерн и роут.
Re: Для чего UrlRule::$pattern и UrlRule::$route ?
Вы не слышите, что это делается в ПОЛЬЗОВАТЕЛЬСКОМ КЛАССЕ ПРАВИЛА.
http://www.yiiframework.com/doc-2.0/guide-url.html - в самом низу пример из документации. Зачем там они нужны ?
viewtopic.php?f=19&t=17957 - очень красивое решение ... мусором закрывать 2 переменные. Я об этом.
Моё правило, которое в разных проявлениях очень часто используется.(В таком виде не будет работать)
Что-то такое нужно впихнуть в начало, чтобы завелось.
Зачем я тут должен определять эти 2 свойства, которые мне абсолютно не нужны ?
Я считаю, что это в корне не правильно. Если допустить такое еще в нескольких базовых классах других компонентов, то код на Yii2 будет выглядеть в разы грязнее первого yii. Да и вообще это выглядит, как я уже говорил, просто сыро и не качественно. Пока не услышал конструктивного ответа для необходимости этой проверки на пустоту свойств UrlRule::$pattern и UrlRule::$route.
viewtopic.php?f=19&t=17957 - нижний самый коммент. Я такого же мнения.
http://www.yiiframework.com/doc-2.0/guide-url.html - в самом низу пример из документации. Зачем там они нужны ?
viewtopic.php?f=19&t=17957 - очень красивое решение ... мусором закрывать 2 переменные. Я об этом.
Извиняюсь, нужно было с него начать.anton44eg писал(а):не очень понимаю какое может быть правило без паттерна или роута, приведите пример
Моё правило, которое в разных проявлениях очень часто используется.(В таком виде не будет работать)
Код: Выделить всё
class MyUrlRule extends UrlRule
{
public function createUrl($manager, $route, $params)
{
if (isset($params['url']) && ($route === 'controller1/view' || $route === 'controller2/view')) {
$path = $params['url'];
unset($params['url']);
} else
return false;
return $path.$hash;
}
public function parseRequest($manager, $request)
{
$pathInfo = trim($request->pathInfo, '/');
if (strpos($pathInfo, '/'))
return false;
if (($model = Game::findOne(['url'=>$pathInfo])) !== null) {
$route = 'controller1/view';
$params = ['url' => $pathInfo];
} elseif (($model = Developer::findOne(['url'=>$pathInfo])) !== null) {
$route = 'controller2/view';
$params = ['url' => $pathInfo];
} else
return false;
return [$route, $params];
}
}
Код: Выделить всё
class MyUrlRule extends UrlRule
{
/**
* Initializes this rule.
*/
public function init()
{
$this->pattern = 'garbage';
$this->route = 'garbage';
parent::init();
}
....
Нововведение тут при том, что раньше эти свойства не проверялись на пустоту в родительском ините и было всё красиво и понятно. Теперь, следуя документации, я должен наследовать класс со своими правилами от yii\web\UrlRule и переопределять либо его инит, либо подставлять "мусор" в значение этих двух переменных.zelenin писал(а):причем здесь нововведение?
Я считаю, что это в корне не правильно. Если допустить такое еще в нескольких базовых классах других компонентов, то код на Yii2 будет выглядеть в разы грязнее первого yii. Да и вообще это выглядит, как я уже говорил, просто сыро и не качественно. Пока не услышал конструктивного ответа для необходимости этой проверки на пустоту свойств UrlRule::$pattern и UrlRule::$route.
viewtopic.php?f=19&t=17957 - нижний самый коммент. Я такого же мнения.
https://github.com/yiisoft/yii2/blob/2. ... #L163-L176 - проверяет только, если используется класс по-умолчанию(yii\web\UrlRule). То есть, если мы передаем не массив. Я передаюzelenin писал(а):UrlManager должен найти необходимый роут. Берутся все правила и перебором по очереди проверяются соответствию паттерну. Если соответствует, то формируется урл на основе роута.
Код: Выделить всё
['class'=>\frontend\components\MyUrlRule::classname()]
Именно это и вызывает всё недовольствоzelenin писал(а):Если вы загляните в UrlRule:init(), то заметите первые две проверки на нулевые паттерн и роут.
Re: Для чего UrlRule::$pattern и UrlRule::$route ?
1) Если наследовать от yii\web\UrlRule, как показано в доках, то просто в своем классе сделайте пустой init()
2) А так вообще класс своего правила не обязан наследоваться от yii\web\UrlRule, а должен реализовать интерфейс UrlRuleInterface:
2) А так вообще класс своего правила не обязан наследоваться от yii\web\UrlRule, а должен реализовать интерфейс UrlRuleInterface:
Re: Для чего UrlRule::$pattern и UrlRule::$route ?
Спасибо. Не приметил, основывался на примере из документации.maleks писал(а):1) Если наследовать от yii\web\UrlRule, как показано в доках, то просто в своем классе сделайте пустой init()
2) А так вообще класс своего правила не обязан наследоваться от yii\web\UrlRule, а должен реализовать интерфейс UrlRuleInterface: