С локализацията се справих. Но имам още едно въпросче . Значи на вестника главния контролер е “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" и аз там да си правя квото поискам.
Да но нещо не мога да го подкарам Изкарва ми няква грешка:
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
чрез missingAction ще задоволиш нуждата си, но не е правилно… Нямаш нужда от различен метод за всяка категория, при положение че всичките ще правят едно и също!
Това което ти трябва е фиксиран екшън и параметър към него. Т.е. ако имаш news контролер, той да има view метод, а метода да получава гет параметър…
URL-а ти ще стане нещо подобно на това:
http://your.site/news/view/category/europe
Така в метода view ще получиш променлива category (в $_GET масива), която ще има стойност europe.
До колкото разбрах ти искаше да можеш да подааш няколко категории - това не е проблем с горната схема, просто смени разделителя между категориите - от '/' на '.' или '-':
Проблема идва от там че europe,asia… са ми категории в базата т.е. могат да се добавят и да се махат, като искам това да става без да се налага да променям кода. Искам когато имам site.com/news/europe след като нямам такъв action да селектна от базата и да вида че това е категория и да листна новините от нея с actionView с параметър europe. Просто се надявах да стане без да ползвам rewrite.
Твърдя че имам малко опит в разработване на web сайтове затова питам за да разбера как е best practise, а не да се мъча да откривам топлата вода
В крайна сметка го направих с missingAction(), само че искам да знам защо според теб не е правилно така да се реализира ?
Платформата ти осигурява механизъм да си подадеш параметър и да го маскираш по желания начин. missingAction-а е предвиден за обработка на изключения… Това е все едно вместо if-then-else конструкция да изпозлваш try-catch. Не че не става, просто не е подравнено с добрата практикра.
Представи си, че утре missingAction изчезне и контролера започне да хвърля ексепшън под някаква друга форма - губиш възможоста за миграция към по-нова платформа и ще трябва да пренапишеш стратегическа функционалност - ако например ставаше дума за показване на съобщение, когато лиспва страница (примерно де) - това не е стратегическа за приложението ти функционалност и няма проблем при миграция да го промениш. Но в твоя случай едно от най-важните фунцкии е базирано на механизъм за изключения и при евентуална промяна ще има търкания и мъркания…
Незнам колко е важен проекта - до колкото схванах е собствен такъв, но и не е важно - просто исках да кажа, че не е добра практика да го направиш така… Приеми го за съвет, пък дано ти е полезен…