curl через ActiveRecord
curl через ActiveRecord
Здравствуйте.
В этом посте хотел бы уточнять моменты, которые будут возникать по вопросу обозначенному в заголовке темы. От обоснованности такого решения и до его реализации.
Итак, ситуация следующая:
Сайт работает с некоторыми данными, которые хранятся где-то и получаются через CURL, а не через прямой запрос в базу. Обозначу их как услуги.
В тоже время есть данные, которые хранятся ближе к нам и к ним доступ можно получить спросив напрямую базу данных. Обозначу их как рейтинг услуги.
Сразу оговорюсь, что свести их в одно место хранения не получится, так как "услуги" создаются третьей стороной не только для нас, а рейтинги нужна как раз для "экземпляра услуг" на нашем сайте.
Вопрос: на сколько "правилен" подход, что логически рейтинг относится к услуге и должен запрашиваться через модель услуг, с которой связанна модель рейтинга? А редактироваться рейтинги должны через модель пользователя, который оставляет рейтинг.
Вопрос 2: является ли архитектурно правильным решение сделать реализацию CURL под ActiveRecord ?
Если что-то непонятно написал, спрашивайте, постараюсь расписать подробней...
В этом посте хотел бы уточнять моменты, которые будут возникать по вопросу обозначенному в заголовке темы. От обоснованности такого решения и до его реализации.
Итак, ситуация следующая:
Сайт работает с некоторыми данными, которые хранятся где-то и получаются через CURL, а не через прямой запрос в базу. Обозначу их как услуги.
В тоже время есть данные, которые хранятся ближе к нам и к ним доступ можно получить спросив напрямую базу данных. Обозначу их как рейтинг услуги.
Сразу оговорюсь, что свести их в одно место хранения не получится, так как "услуги" создаются третьей стороной не только для нас, а рейтинги нужна как раз для "экземпляра услуг" на нашем сайте.
Вопрос: на сколько "правилен" подход, что логически рейтинг относится к услуге и должен запрашиваться через модель услуг, с которой связанна модель рейтинга? А редактироваться рейтинги должны через модель пользователя, который оставляет рейтинг.
Вопрос 2: является ли архитектурно правильным решение сделать реализацию CURL под ActiveRecord ?
Если что-то непонятно написал, спрашивайте, постараюсь расписать подробней...
Re: curl через ActiveRecord
Почему бы по крону не забирать ваши "Услуги" и хранить в своей базе. это будет и быстрее и понятнее для архитектуры.
Сила аргументов, аргументы силы!
Re: curl через ActiveRecord
Система большая и распределённая. И в принципе так и делается, тоесть услуги забираются и хрянтся. Только с базой, в которой они хранятся взаимодействует не только сайт. Поэтому наружу торчат не порты сервера базы данных, а HTTP хвост, за который могут уцепиться все участники системы.
Re: curl через ActiveRecord
можно просто создать компонент CComponent, который будет обращаться за данными в curl, и на основе этих данных связываться с моделью рейтинга
RTFM !
Re: curl через ActiveRecord
А не могли бы подсказать статейки, где описывается создание компонента. По мануалу пока не очень понял, как компонент создаётся и связывается.
Re: curl через ActiveRecord
Подскажите хотя бы с чего начать? В какой папке должен лежать файлик с описанием свойств и событий компонента?
Re: curl через ActiveRecord
Начать можно с того, чтобы использовать extension ehttpclient.fowork1 писал(а):Подскажите хотя бы с чего начать? В какой папке должен лежать файлик с описанием свойств и событий компонента?
Создать файл в protected/components
Код: Выделить всё
MyComponent extends CComponent
Re: curl через ActiveRecord
Опирался на viewtopic.php?f=3&t=2379&hilit=%D0%BA%D ... 2&start=10
Правильно ли я понял, что для успешной работы с компонентом для решения описанной в начале ситуации нужно:
components/CURL_AR.php
controllers/CURL_ARController.php
и добавить в config/main.php
А кто первым вызывается контроллер или компонент, который вызывает контроллер? Или я что-то упустил?
Правильно ли я понял, что для успешной работы с компонентом для решения описанной в начале ситуации нужно:
components/CURL_AR.php
Код: Выделить всё
public function inet()
{
Yii::app()->controllerMap['CURL_AR']=>array(
'class'=>dirname(__FILE__).'/CURL_ARController.php',
);
}
Код: Выделить всё
public function actionCURL()
{
...
}
Код: Выделить всё
'controllerMap' => array(
'CURL_AR' => array(
'class' => 'ext.EMPI.EMPIController',
'site_success_url' => array('dddd/dddd'),
'onComplited' => array('Order','Complited'),
)
),
Re: curl через ActiveRecord
Извиняюсь, что прыгаю, но
Сейчас нашёл готовый компонент для работы с CURL(http://www.yiiframework.com/extension/curl/) и прикрутил для проверки к контроллеру. Работает. Но он реализаван из CApplicationComponent.
Возник вопрос как его прикрутить к модели так, чтобы она (наследуемая от CActiveRecord) стала работать с компонентом как с источником данных, а не ругаться на него, мол это не база данных.
Сейчас нашёл готовый компонент для работы с CURL(http://www.yiiframework.com/extension/curl/) и прикрутил для проверки к контроллеру. Работает. Но он реализаван из CApplicationComponent.
Возник вопрос как его прикрутить к модели так, чтобы она (наследуемая от CActiveRecord) стала работать с компонентом как с источником данных, а не ругаться на него, мол это не база данных.
Re: curl через ActiveRecord
Это просто обертка для курл. Я рекомендую все же вам ehttpclient, он удобнее намного.fowork1 писал(а):Извиняюсь, что прыгаю, но
Сейчас нашёл готовый компонент для работы с CURL(http://www.yiiframework.com/extension/curl/) и прикрутил для проверки к контроллеру. Работает. Но он реализаван из CApplicationComponent.
Возник вопрос как его прикрутить к модели так, чтобы она (наследуемая от CActiveRecord) стала работать с компонентом как с источником данных, а не ругаться на него, мол это не база данных.
Создайте виртуальную модель, без базы.
Re: curl через ActiveRecord
Буду очень благодарен, если подскажите, как это сделать или в каком направлении искать инфу.Создайте виртуальную модель, без базы
Re: curl через ActiveRecord
Что, совсем никто ничего подсказать не может?
Re: curl через ActiveRecord
А что такое ehttpclient и ка его использовать? можно ссылку?
Re: curl через ActiveRecord
Я так понимаю, что это тоже обёртка. Мне в принципе не важно какую обёртку использовать. Проблема в том, чтобы её встроить в структуру yii
Re: curl через ActiveRecord
создаем компонент CComponent или модель CModel, в нем описываем метод getDataFromCurl(), методом получаем данные. на основе этих данных запрашиваем связанные данные из базы и формируем выходной массив - это можно тоже завернуть в метод, например prepareData().fowork1 писал(а):Что, совсем никто ничего подсказать не может?
RTFM !
Re: curl через ActiveRecord
спасибо, что откликнулись, Because!
Сейчас пытаюсь реализовать запись данных после получения в таком же формате, как это делает AtiveRecord
Делал от CModelbecause писал(а): создаем компонент CComponent или модель CModel
тут ситуация несколько сложнее. Если бы сделать один запрос по CURl, то конечно отдельный метод и нет проблем. Задача стоит сделать паралель CActiveRecord, чтобы с ней можно было работать практически так же в рамках REST запросов, только данные должны приходить не через соединение с базой, а через CURL.because писал(а):, в нем описываем метод getDataFromCurl(), методом получаем данные. на основе этих данных запрашиваем связанные данные из базы и формируем выходной массив - это можно тоже завернуть в метод, например prepareData().
Сейчас пытаюсь реализовать запись данных после получения в таком же формате, как это делает AtiveRecord
Re: curl через ActiveRecord
Пока сделал следующим образом:
Есть класс, наследуемый от ActiveRecord. В нём есть хранилище экземпляров самого себя (_models). И есть класс, с переменной columns, который хранится в _md.
Так же есть несколько модифицированные методы: model(), attributeNames(), getMetaData().
Пока оно весьма бардачно, но зато данные бегают и для контроллера выглядит так же, как обычный ActiveRecord
Есть класс, наследуемый от ActiveRecord. В нём есть хранилище экземпляров самого себя (_models). И есть класс, с переменной columns, который хранится в _md.
Так же есть несколько модифицированные методы: model(), attributeNames(), getMetaData().
Пока оно весьма бардачно, но зато данные бегают и для контроллера выглядит так же, как обычный ActiveRecord