CModel против CFormModel против CActiveRecord

Я создаю интенсивное приложение БД в yii. Таким образом, производительность и безопасность, естественно, вызывают беспокойство. Помимо этого проверка формы также является важным критерием. В целях безопасности я планирую использовать привязку параметров для всех запросов Sql. Для проверки я хочу использовать валидаторы, предоставленные Yii, вместо того, чтобы развертывать свои собственные файлы . Я знаю, что CActiveRecord снижает производительность. Поэтому я планирую создать классы Cmodel для всех своих таблиц, определить правила проверки в этих соответствующих моделях, а также определить функции для выполнения запросов sql для извлечения и вставки данных. Весь мой сбор данных на веб-сайте осуществляется в основном через формы (около 95%), если я буду использовать Cformmodel, я действительно не понимаю различия между Cmodel и Cformmodel, есть ли какое-либо снижение производительности при использовании любого из них.

Кроме того, чтобы предотвратить XSS-атаку, я хочу использовать оболочку очистки HTML в качестве правила проверки, поскольку я почти везде читал, что производительность этой оболочки плохая, будет ли она плохой, даже если я использую ее в качестве правила проверки? И должен ли я отображать свой выходной текст с помощью Chtml::Encode, даже если я очищаю ввод?

Мой примерный план работы с данными:

    $users= new Users() ; //Users is extending CModel , contains validation rules 
    $users=getdata(Yii->app->userid()) ; 
    if(isset('update'))
    {
        if($users->validate())
            {$users->updatedata() ; }
    }

$this->render('users','data'=>$users) 

person Varun Jain    schedule 06.10.2012    source источник


Ответы (4)


CFormModel наследуется от CModel, CModel — это просто общий класс Model, различий в производительности при использовании CFormModel нет, что больше подойдет для вашего приложения, если вы не планируете использовать CActiveRecord.

Надеюсь, что для «функций для выполнения SQL-запросов» вы имеете в виду хранимые процедуры, в противном случае не так много прироста производительности, даже в этом случае написание собственных SQL-запросов только для вставки и извлечения отдельных моделей не очень помогает. Мой совет заключается в том, что вы заботитесь о производительности позже. когда у вас действительно есть что улучшить.

Очистка ввода отличается от кодирования, с очисткой HTML вы удаляете вредоносный html, чтобы предотвратить XSS или другие теги, которые вы не хотите разрешать. но строка может содержать, например, ( ' ). то, что делает CHtml::encode, просто генерирует эквивалент HTML, так что вместо этого вы получаете объекты html.

person Asgaroth    schedule 06.10.2012

Я разместил ссылку на форум yii, где вы можете найти лучший ответ.

Ссылка на форум Yii

CModel Класс модели является базовым как для CFormModel, так и для CActiveRecord.

CActiveRecord используется, когда мы выполняем операцию CRUD с таблицей базы данных и нуждаемся в определении переменных в соответствии с ними.

CFormModel используется, когда нам нужна не операция CRUD, а логическая операция, такая как форма входа. Здесь мы не используем никакую таблицу для модели.

person Onkar Janwa    schedule 08.10.2012

Это называется синдромом преждевременной оптимизации, поскольку вы блокируете свое развитие ранней и ненужной оптимизацией.

Сначала разработайте свое приложение с лучшей моделью/схемой, насколько это возможно, и только после этого ищите узкие места и способы повышения производительности, времени загрузки и т. д.

person emix    schedule 24.01.2013
comment
Ха-ха. Я не могу не согласиться с вами полностью. Тем не менее, я создал приложение (вопрос уже довольно старый), все использовал CModel и не сильно пропустил CActiveRecord. - person Varun Jain; 25.01.2013

Yii реализует два типа моделей:

  1. модель формы
  2. активная запись.

Оба являются производными от одного и того же базового класса CModel. Модель формы — это экземпляр CFormModel. Модель формы используется для хранения данных, собранных из пользовательского ввода. Такие данные часто собираются, используются, а затем удаляются. Например, на странице входа мы можем использовать модель формы для представления информации об имени пользователя и пароле, предоставленной конечным пользователем. Для получения более подробной информации, пожалуйста, обратитесь к разделу «Работа с формой».

Active Record (AR) — это шаблон проектирования, используемый для абстрагирования доступа к базе данных объектно-ориентированным способом. Каждый объект AR является экземпляром CActiveRecord или его дочернего класса, представляющим одну строку в таблице базы данных. Поля в строке представлены как свойства объекта AR. Подробности об AR можно найти в Active Record.

Источник

person raghul    schedule 16.04.2014