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

Я строю DB интенсивное приложение в 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) 

4 ответа

Решение

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

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

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

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

Yii Форум Ссылка

CModel Модельный класс является базовым для обоих CFormModel & CActiveRecord,

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

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

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

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

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

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

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

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

Источник

Другие вопросы по тегам