Подкласс CModel в yii - PullRequest
       4

Подкласс CModel в yii

1 голос
/ 18 марта 2011

Я фанат yii 4 дня, и мне он очень нравится.

У меня есть специальная таблица базы данных, которую CActiveRecord не может использовать напрямую.Мое решение состоит в том, чтобы создать подкласс CModel, чтобы иметь собственную логику для перечисления, создания, сохранения и удаления записей.Мой новый подкласс CModel не может быть создан;Похоже, что CModel требует, чтобы было определено больше методов, позволяющих создать экземпляр из него.

Мой вопрос: правильный ли это подход или есть лучшие способы?Если да, какие недостающие методы нужно определить, чтобы завершить мой новый класс;не абстрактно

Спасибо

Ответы [ 3 ]

2 голосов
/ 18 марта 2011

Я обычно создаю свои собственные классы для обработки так называемой «логики» веб-приложения, которое я создаю.

Я помещаю его в другую папку (обычно это папка логики) и автоматически импортирую каталог из конфига. Классы логики не являются подклассами любой модели

public class ProfitLogic { ... }

где внутри класса (ов) я реализую функции, которые создают экземпляры, и использую любые ActiveRecord (s), которые мне нужны.

Причина этого заключается в том, что при создании прототипов я часто совершенствую дизайн своей базы данных, и мне необходимо заново сгенерировать ActiveRecords: p

1 голос
/ 16 июня 2012

Я довольно новичок в Yii, но обнаружил, что расширение CForm, как и в модели ContactForm по умолчанию, может быть полезным.

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

1 голос
/ 18 марта 2011

Вообще говоря, ваш подход в порядке, и он был бы приемлем, даже если вы не были "вынуждены" принять его. Я использую подкласс CActiveRecord в качестве основы для своих моделей, чтобы обеспечить дополнительные пользовательские функции.

Что касается вашего другого вопроса, вам нужно только реализовать attributeNames(), чтобы иметь возможность создавать экземпляры объектов вашего класса.

Однако, почему вы не подкласс CActiveRecord напрямую вместо CModel? Вы все еще можете переопределить любой и все методы, которые вы выберете. Ваша база данных настолько сильно отличается от обычных схем, что вы не сможете повторно использовать какую-либо логику?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...