UrlManager проблема с генерацией ЧПУ.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Cazelon
Сообщения: 10
Зарегистрирован: 2014.10.23, 15:58

UrlManager проблема с генерацией ЧПУ.

Сообщение Cazelon »

Всем вечер добрый.
В конфигах прописаны следующие правила для урл:

Код: Выделить всё

'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'enablePrettyUrl'      => true,
            'showScriptName'       => false,
            'enableStrictParsing'  => true,
            'rules' => [
                '' => 'site/index',
                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
                '<controller:\w+>/<action:\w+>/<alias:\w+>' => '<controller>/<action>',
            ],
        ]
Ссылку генерирую следующим образом:

Код: Выделить всё

echo \yii\helpers\Url::to(['articles/read', 'alias'=> 'hello']);
Но на выходе почему - то генерируется ссылка следующего вида:
/articles/read?alias=hello
А нужно же, чтоб она выглядела так:
/articles/read/hello
Возможно, кто - то подскажет, где и что еще нужно прописать, чтоб ссылки выглядели нормально?
Аватара пользователя
chungachguk
Сообщения: 435
Зарегистрирован: 2012.07.17, 11:52

Re: UrlManager проблема с генерацией ЧПУ.

Сообщение chungachguk »

Может так сделать?

Код: Выделить всё

echo \yii\helpers\Url::to(['articles/read/hello');
 
Aibolit
Сообщения: 31
Зарегистрирован: 2012.12.18, 23:38

Re: UrlManager проблема с генерацией ЧПУ.

Сообщение Aibolit »

Поменяйте местами второе и третье правило
Cazelon
Сообщения: 10
Зарегистрирован: 2014.10.23, 15:58

Re: UrlManager проблема с генерацией ЧПУ.

Сообщение Cazelon »

Aibolit писал(а):Поменяйте местами второе и третье правило
Та даже если одно это правило оставить - не работает.
chungachguk писал(а):Может так сделать?

Код: Выделить всё

echo \yii\helpers\Url::to(['articles/read/hello');
  
Ну здорово, а если мне алиасы подставлять из базы надо?
Аватара пользователя
asset
Сообщения: 245
Зарегистрирован: 2012.12.04, 20:50
Откуда: Казахстан

Re: UrlManager проблема с генерацией ЧПУ.

Сообщение asset »

sluggable behavior
Cazelon
Сообщения: 10
Зарегистрирован: 2014.10.23, 15:58

Re: UrlManager проблема с генерацией ЧПУ.

Сообщение Cazelon »

Похоже на то, что он это правило вообще игнорирует. Даже если перейти по ссылке localhost/articles/read/hello, при наличии контроллера

Код: Выделить всё

class ArticlesController extends Controller{ 
    public function actionRead($alias)
    {
        echo $alias
    }
}

вернет ошибку 404. Либо он не видет это правило, либо оно неверное.
Последний раз редактировалось Cazelon 2014.11.21, 20:08, всего редактировалось 1 раз.
Cazelon
Сообщения: 10
Зарегистрирован: 2014.10.23, 15:58

Re: UrlManager проблема с генерацией ЧПУ.

Сообщение Cazelon »

asset писал(а):sluggable behavior

А подробней можно пожалуйста?
Аватара пользователя
asset
Сообщения: 245
Зарегистрирован: 2012.12.04, 20:50
Откуда: Казахстан

Re: UrlManager проблема с генерацией ЧПУ.

Сообщение asset »

Если тебе нужен через алиас из бд делай через slug

https://github.com/yiisoft/yii2/blob/ma ... or.php#L36

ссылка будет виде articles/read/(твой алиас тут)

так же?
Cazelon
Сообщения: 10
Зарегистрирован: 2014.10.23, 15:58

Re: UrlManager проблема с генерацией ЧПУ.

Сообщение Cazelon »

asset писал(а):Если тебе нужен через алиас из бд делай через slug

https://github.com/yiisoft/yii2/blob/ma ... or.php#L36

ссылка будет виде articles/read/(твой алиас тут)

так же?

Что - то я не совсем пойму, для чего вообще создавать создавать какое - то поведение, если мне нужно банально создать ссылку. В настройках прописал нужное правило и во воьюхе написал echo \yii\helpers\Url::toRoute(['articles/read','id'=> 'hello']);, по - моему раньше этого было достаточно, чтоб нормальный урл сгенерировать. Зачем всё усложнять?!
Аватара пользователя
r3verser
Сообщения: 195
Зарегистрирован: 2012.04.01, 17:29
Откуда: Киев

Re: UrlManager проблема с генерацией ЧПУ.

Сообщение r3verser »

Cazelon писал(а):
Aibolit писал(а):Поменяйте местами второе и третье правило
Та даже если одно это правило оставить - не работает.
chungachguk писал(а):Может так сделать?

Код: Выделить всё

echo \yii\helpers\Url::to(['articles/read/hello');
 
Ну здорово, а если мне алиасы подставлять из базы надо?
Все работает, если сделать как написали.

Код: Выделить всё

'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'enablePrettyUrl'      => true,
            'showScriptName'       => false,
            'enableStrictParsing'  => true,
            'rules' => [
                '' => 'site/index',
                '<controller:\w+>/<action:\w+>/<alias:\w+>' => '<controller>/<action>',
                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
            ],
        ],
Cazelon
Сообщения: 10
Зарегистрирован: 2014.10.23, 15:58

Re: UrlManager проблема с генерацией ЧПУ.

Сообщение Cazelon »

r3verser писал(а): Все работает, если сделать как написали.

Код: Выделить всё

'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'enablePrettyUrl'      => true,
            'showScriptName'       => false,
            'enableStrictParsing'  => true,
            'rules' => [
                '' => 'site/index',
                '<controller:\w+>/<action:\w+>/<alias:\w+>' => '<controller>/<action>',
                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
            ],
        ],
Да, так действительно работает. Видимо когда я менял местами правила, где - то промахнулся.
Тогда еще один вопрос:
А разве по условиям, не должно быть так, что в случае, когда ссылка вида: /controller_name/action_name/alias_name и при этом, правила в следующем порядке:

Код: Выделить всё

    '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
    '<controller:\w+>/<action:\w+>/<alias:\w+>' => '<controller>/<action>',
то первое правило должно проигнорироваться так как оно не подходит по условию и сработать следующее, подходящее под указанную ссылку выше?
Аватара пользователя
VaNnOrus
Сообщения: 96
Зарегистрирован: 2014.10.09, 12:50

Re: UrlManager проблема с генерацией ЧПУ.

Сообщение VaNnOrus »

На сколько я понимаю yii - более общее правило сработает раньше, чем более частное, поэтому общие правила в конце пишутся.

Первая часть пути подходит - правило сработает, не важно что там дальше.
Cazelon
Сообщения: 10
Зарегистрирован: 2014.10.23, 15:58

Re: UrlManager проблема с генерацией ЧПУ.

Сообщение Cazelon »

VaNnOrus писал(а):На сколько я понимаю yii - более общее правило сработает раньше, чем более частное, поэтому общие правила в конце пишутся.

Первая часть пути подходит - правило сработает, не важно что там дальше.
Да, пожалуй дело таки в этом. Всем спасибо.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: UrlManager проблема с генерацией ЧПУ.

Сообщение zelenin »

asset писал(а):sluggable behavior
ась?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: UrlManager проблема с генерацией ЧПУ.

Сообщение zelenin »

Cazelon писал(а): первое правило должно проигнорироваться так как оно не подходит по условию и сработать следующее, подходящее под указанную ссылку выше?
первое подходит по условию и будет применено.
Аватара пользователя
asset
Сообщения: 245
Зарегистрирован: 2012.12.04, 20:50
Откуда: Казахстан

Re: UrlManager проблема с генерацией ЧПУ.

Сообщение asset »

zelenin писал(а):
asset писал(а):sluggable behavior
ась?
чем тут slug плох? Последние время я тебя не понимаю ;)

viewtopic.php?f=19&t=20618&p=121558#p121558
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: UrlManager проблема с генерацией ЧПУ.

Сообщение zelenin »

asset писал(а):
zelenin писал(а):
asset писал(а):sluggable behavior
ась?
чем тут slug плох? Последние время я тебя не понимаю ;)

viewtopic.php?f=19&t=20618&p=121558#p121558
причем тут поведение, генерируещее слаг, если речь идет о генерации урлов?
Аватара пользователя
asset
Сообщения: 245
Зарегистрирован: 2012.12.04, 20:50
Откуда: Казахстан

Re: UrlManager проблема с генерацией ЧПУ.

Сообщение asset »

zelenin писал(а): причем тут поведение, генерируещее слаг, если речь идет о генерации урлов?
Он и не только урла хочет, еще по нему алиас сделать.

Урл это одно, но.
Cazelon писал(а): Ну здорово, а если мне алиасы подставлять из базы надо?
так покажи как это делается так, или нормально ли вообще так делать...
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: UrlManager проблема с генерацией ЧПУ.

Сообщение zelenin »

asset писал(а):
zelenin писал(а): причем тут поведение, генерируещее слаг, если речь идет о генерации урлов?
Он и не только урла хочет, еще по нему алиас сделать.

Урл это одно, но.
Cazelon писал(а): Ну здорово, а если мне алиасы подставлять из базы надо?
так покажи как это делается так, или нормально ли вообще так делать...
про базу он говорит в контексте предложенного метода echo \yii\helpers\Url::to(['articles/read/hello'); в котором нет алиаса. Читай тему сначала, вникая.
Аватара пользователя
asset
Сообщения: 245
Зарегистрирован: 2012.12.04, 20:50
Откуда: Казахстан

Re: UrlManager проблема с генерацией ЧПУ.

Сообщение asset »

zelenin писал(а):
asset писал(а):
zelenin писал(а): причем тут поведение, генерируещее слаг, если речь идет о генерации урлов?
Он и не только урла хочет, еще по нему алиас сделать.

Урл это одно, но.
Cazelon писал(а): Ну здорово, а если мне алиасы подставлять из базы надо?
так покажи как это делается так, или нормально ли вообще так делать...
про базу он говорит в контексте предложенного метода echo \yii\helpers\Url::to(['articles/read/hello'); в котором нет алиаса. Читай тему сначала, вникая.
В контексте,не в контексте.Я хорошо вникнул.

Код: Выделить всё

class ArticlesController extends Controller{ 
    public function actionRead($alias)
    {
       // он тут будет  в бд стучать алиасу?
        echo $alias
    }
 
откуда тогда взялся articles/read/hello ?
Ответить