Yii Framework Forum: Custom action in controller - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Custom action in controller Rate Topic: -----

#1 User is offline   phreak 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 85
  • Joined: 19-February 09

Posted 02 April 2009 - 05:48 AM

С локализацията се справих. Но имам още едно въпросче :). Значи на вестника главния контролер е "News", обаче имам доста категории в дървовидна структура, които искам да се отварят така: news/europe, news/world и т.н. Според вас как е най добре да се подходи ?
Втората стъпка ще е и след това да направя и подкатегориите news/world/politics , news/europe/finance ... Според мен трябва на ниво контролер ако не съществува даден action да мога да го насоча към action по мой избор с даден параметър.
Може би един mod_rewrite, но мисля че и с yii има начин.

Това което искам и си го представям аз е :
Като извикам www.site.com/News/Europe/Politics в контролера News в някой функция(след като вече е видяло че нямам action "Europe",да ми даде променлива action="europe/politics" и аз там да си правя квото поискам.
0

#2 User is offline   phreak 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 85
  • Joined: 19-February 09

Posted 02 April 2009 - 05:58 AM

Мисля че намерих каквото ми трябваше :http://www.yiiframew...r#missingAction

Да но нещо не мога да го подкарам :( Изкарва ми няква грешка:
Argument 1 passed to NewsController::missingAction() must be an instance of string, string given, called in D:\WebSites\framework\web\CController.php on line 227 and defined
0

#3 User is offline   Sentinel 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 51
  • Joined: 04-March 09
  • Location:Russe, Bulgaria

Posted 02 April 2009 - 10:27 AM

чрез missingAction ще задоволиш нуждата си, но не е правилно... Нямаш нужда от различен метод за всяка категория, при положение че всичките ще правят едно и също!

Това което ти трябва е фиксиран екшън и параметър към него. Т.е. ако имаш news контролер, той да има view метод, а метода да получава гет параметър...
URL-а ти ще стане нещо подобно на това:
http://your.site/new...category/europe

Така в метода view ще получиш променлива category (в $_GET масива), която ще има стойност europe.
До колкото разбрах ти искаше да можеш да подааш няколко категории - това не е проблем с горната схема, просто смени разделителя между категориите - от '/' на '.' или '-':
http://your.site/new...europe.politics

или
http://your.site/new...europe-politics


(второто е по-хубаво за гугъл)

Можеш да си поиграеш още и да скриеш 'view' и 'category' чрез url rules. Тогава url-а ти ще прилича на това:

http://your.site/news/europe.politics


Е не е ли това, което искаш?


0

#4 User is offline   phreak 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 85
  • Joined: 19-February 09

Posted 02 April 2009 - 12:05 PM

Е това искам колега :)
Най - точно искам урл-та от вида на :
site.com/news - начална страница
site.com/news/europe - листва новините от Европа
site.com/news/europe/politics - листва новините за политика от европа
site.com/news/read/Boiko_Borisov_blah_blah.php - да отваря новина с title Бойко Борисов блах блах

Проблема идва от там че europe,asia... са ми категории в базата т.е. могат да се добавят и да се махат, като искам това да става без да се налага да променям кода. Искам когато имам site.com/news/europe след като нямам такъв action да селектна от базата и да вида че това е категория и да листна новините от нея с actionView с параметър europe. Просто се надявах да стане без да ползвам rewrite.
Твърдя че имам малко опит в разработване на web сайтове затова питам за да разбера как е best practise, а не да се мъча да откривам топлата вода :)
0

#5 User is offline   Sentinel 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 51
  • Joined: 04-March 09
  • Location:Russe, Bulgaria

Posted 02 April 2009 - 12:36 PM

http://www.yiiframew...r-friendly-urls
0

#6 User is offline   phreak 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 85
  • Joined: 19-February 09

Posted 02 April 2009 - 11:47 PM

В крайна сметка го направих с missingAction(), само че искам да знам защо според теб не е правилно така да се реализира ?
0

#7 User is offline   Sentinel 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 51
  • Joined: 04-March 09
  • Location:Russe, Bulgaria

Posted 03 April 2009 - 03:07 AM

Quote

В крайна сметка го направих с missingAction(), само че искам да знам защо според теб не е правилно така да се реализира ?


Платформата ти осигурява механизъм да си подадеш параметър и да го маскираш по желания начин. missingAction-а е предвиден за обработка на изключения... Това е все едно вместо if-then-else конструкция да изпозлваш try-catch. Не че не става, просто не е подравнено с добрата практикра.
Представи си, че утре missingAction изчезне и контролера започне да хвърля ексепшън под някаква друга форма - губиш възможоста за миграция към по-нова платформа и ще трябва да пренапишеш стратегическа функционалност - ако например ставаше дума за показване на съобщение, когато лиспва страница (примерно де) - това не е стратегическа за приложението ти функционалност и няма проблем при миграция да го промениш. Но в твоя случай едно от най-важните фунцкии е базирано на механизъм за изключения и при евентуална промяна ще има търкания и мъркания... :)

Незнам колко е важен проекта - до колкото схванах е собствен такъв, но и не е важно - просто исках да кажа, че не е добра практика да го направиш така... :) Приеми го за съвет, пък дано ти е полезен... :)
0

Share this topic:


Page 1 of 1
  • 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