Yii Framework Forum: собственные правила в рутинге - Yii Framework Forum

Jump to content

  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

собственные правила в рутинге Rate Topic: -----

#1 User is offline   3ton 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 30-June 09

Posted 30 June 2009 - 08:08 AM

используя Codeigniter мне понравилась фича в которой я сам определял какие будут пути и как они повлияют на мое приложение

к примеру я мог задать правило при котором путь
http://localhost/en/...s/read/24/print

мог восприниматься моим приложением как обращение к контроллеру books, методу read
причем в методе принимались 2 переменные, первая $pag которая получала значение 24 и вторая $type - значение print

так же обрабатывалось что если у меня встречаются после домена значения en - es - de то это значение присваивалось переменной $language, если же таких переменных там не было, то $language принимало значение ru


вопрос знатокам! ;)
могу ли я использовать такой же подход в Yii ???

заранее спасибо!

0

#2 User is offline   rosko 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 211
  • Joined: 04-January 09
  • Location:Kiev, Ukraine

Posted 30 June 2009 - 10:08 AM

Конечно же!
В файл config/main.php пишется следующее:


'components'=>array(
    ...
    'urlManager'=>array(
...
        'rules'=>array(
            'books/read/<pag:d+>/<type>'          => 'controller/action',
            '<language>/books/read/<pag:d+>/<type>'          => 'controller/action',
)
...

0

#3 User is offline   3ton 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 30-June 09

Posted 30 June 2009 - 03:20 PM

спасибо, думаю подойдет, а как я могу получить значение language ?
0

#4 User is offline   creocoder 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 198
  • Joined: 09-March 09
  • Location:*.php

Posted 30 June 2009 - 06:09 PM

Yii::app()->language, Yii::app()->sourceLanguage, Yii::app()->request->preferredLanguage... Смотря какой нужен, но в общем случае первая конструкция.
0

#5 User is offline   3ton 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 30-June 09

Posted 30 June 2009 - 11:20 PM

я имел ввиду этот language

   'components'=>array(
      ...
      'urlManager'=>array(
      ...
            'rules'=>array(
              'books/read/<pag:d+>/<type>'          => 'controller/action',
              '<language>/books/read/<pag:d+>/<type>'          => 'controller/action',
      )
      ...


значение которого мы передаем через URL

0

#6 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 01 July 2009 - 01:50 AM

$_GET['language']
0

#7 User is offline   3ton 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 30-June 09

Posted 01 July 2009 - 01:54 AM

Quote

link=topic=3027.msg16501#msg16501 date=1246431030]

$_GET['language']


вы уверены?
потому как var_dump($_GET)
не содержит переменной с данным именем

так же просьба учесть что адрес у нас вида
http://localhost/en/...s/read/24/print
а правило
'<language>/books/read/<pag:\d+>/<type>'          => 'books/read',
и переменная language фигурирует только в правиле, а следовательно массив $_GET о ней ничего не знает...
0

#8 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 01 July 2009 - 02:17 AM

я то уверен. а вы уверены что делаете принтовку в контроллере books -> actionRead ?
0

#9 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 01 July 2009 - 02:30 AM

Вот урл:
http://dbhelp.ru/ru/books/


Вот правило:
'<language>/books/' => 'post/empty',


Вот экшинс:

    public function actionEmpty()
    {
    print_r($_GET);
    die();
        }


можете в урла "ru" изменит на любое другое и увидите что всё нормально приходит в $_GET переменную language. Правило я упростил, но на работоспособность не как не влияет.

так что скорее всего это вы что то нетам прописали
0

#10 User is offline   3ton 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 30-June 09

Posted 01 July 2009 - 02:34 AM

Quote

link=topic=3027.msg16508#msg16508 date=1246433423]

так что скорее всего это вы что то нетам прописали


думаю проблема в этом так что вы правы, и спасибо за помощь!

я пробовал присвоить это значение в конфиге переменной

<?php
return array(
...
    'sourceLanguage' => 'ru',
    'language' => $_GET['language'],
...

жаль что не получилось :(
0

#11 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 01 July 2009 - 03:29 AM

пожалуйста :)

ну да, так незя :)
по поводу того как менять язык в приложении читайте вот эту статью http://www.yiiframew...oc/cookbook/26/
0

#12 User is offline   creocoder 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 198
  • Joined: 09-March 09
  • Location:*.php

Posted 01 July 2009 - 06:02 AM

Что не получилось ? А вы уверены, что правильно заданы правила? Вместо

'<language>/books/read/<pag:d+>/<type>' => 'controller/action'

нужно

'<language:w+>/books/read/<pag:d+>/<type>' => 'controller/action'

Забыли указать регулярное выражение. В последнем случае $_GET['language'] получит то, что необходимо.
0

#13 User is offline   3ton 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 30-June 09

Posted 01 July 2009 - 07:25 AM

Quote

link=topic=3027.msg16517#msg16517 date=1246436973]

по поводу того как менять язык в приложении читайте вот эту статью http://www.yiiframew...oc/cookbook/26/


в вашем случае переменную языка необходимо обрабатывать в каждом контроллере, а мне хотелось бы в одном месте

Quote

Что не получилось ? А вы уверены, что правильно заданы правила? Вместо


'<language>/books/read/<pag:d+>/<type>' => 'controller/action'


нужно


'<language:w+>/books/read/<pag:d+>/<type>' => 'controller/action'


Забыли указать регулярное выражение. В последнем случае $_GET['language'] получит то, что необходимо.


а почему тогда переменную <type> можно использовать без регулярки??? ;)
это не повлияет на результат
0

#14 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 01 July 2009 - 09:37 AM

Quote

в вашем случае переменную языка необходимо обрабатывать в каждом контроллере, а мне хотелось бы в одном месте


ничего не мешает создать свой базовый контроллер TestController унаследованный от CController. А все ваши контроллеры уже наследовать от TestController. В TestController естественно добавляете всю работу с языком, и неприйдеться клонировать код :)
0

#15 User is offline   3ton 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 30-June 09

Posted 01 July 2009 - 11:46 AM

Quote

link=topic=3027.msg16574#msg16574 date=1246459079]

ничего не мешает создать свой базовый контроллер TestController унаследованный от CController. А все ваши контроллеры уже наследовать от TestController. В TestController естественно добавляете всю работу с языком, и неприйдеться клонировать код :)



хорошая идея, встречный вопрос - где должен находиться TestController, в какой папке?
0

#16 User is offline   samdark 

  • Having fun
  • Yii
  • Group: Yii Dev Team
  • Posts: 3,315
  • Joined: 17-January 09
  • Location:Russia

Posted 01 July 2009 - 12:23 PM

Например, в components. Вообще абсолютно всё равно. Главное его подключить или прописать путь в автозагрузку.
0

#17 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 01 July 2009 - 12:50 PM

Кидайте в components, либо создайте отдельную папку (но незабудьте в конфиге прописать путь к ней)
0

#18 User is offline   3ton 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 30-June 09

Posted 01 July 2009 - 12:59 PM

Quote

Например, в components. Вообще абсолютно всё равно. Главное его подключить или прописать путь в автозагрузку.


а как прописать его в автозагрузку?

кстати возможно ли указать динамическое правило типа
'<lang:(ru|en)>/<controller>/<action>'  =>  '$2/$3'

чтобы не прописывать отдельной строчкой каждый контроллер и action так как их может быть довольно много
0

#19 User is offline   rosko 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 211
  • Joined: 04-January 09
  • Location:Kiev, Ukraine

Posted 04 July 2009 - 04:48 PM

Логично если он находится в каталог protected/components
0

#20 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 04 July 2009 - 05:39 PM

Quote

а как прописать его в автозагрузку?


если будет в папке компонентов - само загрузиться. ничего прописывать не надо.
0

Share this topic:


  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users