Шаг 5: Контроллер Д/З
Рубрика: Первые шаги
6 Сен. 2010
Рассмотрим правильный вариант решения задачи поставленной в статье "Шаг 5: Контроллер".
Тем кто читает все статьи за один раз и не старается выполнять упражнения самостоятельно я искрение сочувствую. Прошу вас еще раз пересмотреть свое отношение к познанию материала и все таки попробовать посидеть N-ое кол-во времени и самостоятельно пораскинуть мозгами, учитывая что все материалы для решения вы уже получили.
Тем кто выполнил упражнение своими силами и теперь хочет сверится с моим вариантом - прошу читать дальше.
Первым делом я открыл phpMyAdmin (обычно этот скрипт для удобной работы с базой уже установлен у вас на хостинге) и создал таблицу для новостей следующим SQL:
CREATE TABLE `news` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`url` VARCHAR( 100 ) NULL ,
`title` VARCHAR( 255 ) NOT NULL ,
`body` TEXT NOT NULL
) ENGINE = MYISAM
ALTER TABLE `news` ADD UNIQUE(`url`)Я делал только основные поля что бы вы поняли как это работает. После этого я заполняю базу двумя новостями:
INSERT INTO `news` (`id`, `url`, `title`, `body`) VALUES (NULL, 'my-super-news1', 'Тестовая новость 1', 'текст новости 1 текст новости 1 текст новости 1 текст новости 1 текст новости 1 текст новости 1 '), (NULL, 'super-puper-news2', 'Тестовая новость 2', 'текст новости 2 текст новости 2 ');Идея в следующем: пользователь который заходит по ссылке www.mysite.ru/news/my-super-news/ - получает на экране текст первой новости, а если зайдет на www.mysite.ru/news/super-puper-news2 тогда получает текст второй.
Создаем модель (models/News.php) для работы с нашей таблицей новостей:
<?php
class News extends CActiveRecord
{
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'news';
}
}
Модернизируем наш контроллер под работу с базой (controllers/HelloController.php)<?php
class HelloController extends CController
{
public function actionWorld()
{
echo 'Привет от HelloController->actionWorld()';
}
public function actionStepan()
{
echo 'Привет Степан!';
}
public function actionDima()
{
echo 'Привет Дима!';
}
public function actionIvan()
{
echo 'Привет Иван!';
}
public function actionNews()
{
// если хотите, то $_GET['news_name'] можете обработать
// предварительно всякими функциями для безопасноти
$url = $_GET['news_name'];
// проверяем есть ли новость с таким url
if ($news = News::model()->findByAttributes(array('url' => $url))) {
// получается мы нашли в базе запись
// в которой значение url равняется переменной news_name
echo $news->title , '<br>' , $news->body;
} else {
// нет такой новости, об этом и сообщаем:
echo 'новость не существует!';
}
}
}
Вот и все. Заходите по тестовым ссылкам выше и наслаждайтесь работой.Если даже после примера остались вопросы - рекомендую перечитать урок по работе с моделью.
Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
- Рамки MVC весьма размыты, поэтому моё понимание может не совпадать с полученными вами ранее знаниями. Хотел бы напомнить что ... "Шаг 3 : Что такое MVC?"
- Эта статья устарела т.к. была написана для yii версии 1.0.х; Если вы используете более новую версию - у вас могут ... "Урок 5 : Многоязычность"
- Эта статья устарела т.к. была написана для yii версии 1.0.х; Если вы используете более новую версию - у вас могут ... "Настройка 3d капчи на Yii"

[adm] zolter
Было сказано: Понедельник, 06 Сентябрь 2010
Рендер отображений в статье не используется специально. :)

[guest] zolter
Было сказано: Вторник, 07 Сентябрь 2010
Ваши голоса за статью - стимулируют написание новых!

[guest] Султан
Было сказано: Вторник, 14 Июнь 2011
Шаг 6 будет?
Кстати, вчера у Вас сайт полег! Логин и пароль был на показ, надеюсь, что yii не выдает пароль и логин по умолчанию, при ошибке к подключению к базе?

[guest] sidan_root
Было сказано: Вторник, 14 Июнь 2011
Султан, где вы пароль увидели? Zolter@localhost?
Пароль не выдается ни при каких обстоятельствах.

[guest] zolter
Было сказано: Пятница, 20 Январь 2012
Ближайшее время начнется новый цикл статей посвещенный моему текущему проекту - модульной CMS системе. По поводу данного материала для новичков - планирую так же постепенно идти дальше.

[guest] Гость
Было сказано: Суббота, 28 Январь 2012
Пишет "Table "news" does not have a column named "0"."
И не пойму в чем дело(

[guest] Гость
Было сказано: Суббота, 28 Январь 2012
Все разобрался, была синтаксическая ошибка в findByAttributes.
Ждем продолжение статей! как реализуется view?


