curl через ActiveRecord

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
fowork1
Сообщения: 34
Зарегистрирован: 2011.10.27, 16:35

curl через ActiveRecord

Сообщение fowork1 »

Здравствуйте.
В этом посте хотел бы уточнять моменты, которые будут возникать по вопросу обозначенному в заголовке темы. От обоснованности такого решения и до его реализации.

Итак, ситуация следующая:
Сайт работает с некоторыми данными, которые хранятся где-то и получаются через CURL, а не через прямой запрос в базу. Обозначу их как услуги.
В тоже время есть данные, которые хранятся ближе к нам и к ним доступ можно получить спросив напрямую базу данных. Обозначу их как рейтинг услуги.
Сразу оговорюсь, что свести их в одно место хранения не получится, так как "услуги" создаются третьей стороной не только для нас, а рейтинги нужна как раз для "экземпляра услуг" на нашем сайте.

Вопрос: на сколько "правилен" подход, что логически рейтинг относится к услуге и должен запрашиваться через модель услуг, с которой связанна модель рейтинга? А редактироваться рейтинги должны через модель пользователя, который оставляет рейтинг.

Вопрос 2: является ли архитектурно правильным решение сделать реализацию CURL под ActiveRecord ?

Если что-то непонятно написал, спрашивайте, постараюсь расписать подробней...
PixoiD
Сообщения: 111
Зарегистрирован: 2009.09.25, 10:14

Re: curl через ActiveRecord

Сообщение PixoiD »

Почему бы по крону не забирать ваши "Услуги" и хранить в своей базе. это будет и быстрее и понятнее для архитектуры.
Сила аргументов, аргументы силы!
fowork1
Сообщения: 34
Зарегистрирован: 2011.10.27, 16:35

Re: curl через ActiveRecord

Сообщение fowork1 »

Система большая и распределённая. И в принципе так и делается, тоесть услуги забираются и хрянтся. Только с базой, в которой они хранятся взаимодействует не только сайт. Поэтому наружу торчат не порты сервера базы данных, а HTTP хвост, за который могут уцепиться все участники системы.
Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

Re: curl через ActiveRecord

Сообщение because »

можно просто создать компонент CComponent, который будет обращаться за данными в curl, и на основе этих данных связываться с моделью рейтинга
RTFM !
fowork1
Сообщения: 34
Зарегистрирован: 2011.10.27, 16:35

Re: curl через ActiveRecord

Сообщение fowork1 »

А не могли бы подсказать статейки, где описывается создание компонента. По мануалу пока не очень понял, как компонент создаётся и связывается.
fowork1
Сообщения: 34
Зарегистрирован: 2011.10.27, 16:35

Re: curl через ActiveRecord

Сообщение fowork1 »

Подскажите хотя бы с чего начать? В какой папке должен лежать файлик с описанием свойств и событий компонента?
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: curl через ActiveRecord

Сообщение Nafania »

fowork1 писал(а):Подскажите хотя бы с чего начать? В какой папке должен лежать файлик с описанием свойств и событий компонента?
Начать можно с того, чтобы использовать extension ehttpclient.
Создать файл в protected/components

Код: Выделить всё

MyComponent extends CComponent
и писать в него что нужно.
fowork1
Сообщения: 34
Зарегистрирован: 2011.10.27, 16:35

Re: curl через ActiveRecord

Сообщение fowork1 »

Опирался на viewtopic.php?f=3&t=2379&hilit=%D0%BA%D ... 2&start=10

Правильно ли я понял, что для успешной работы с компонентом для решения описанной в начале ситуации нужно:

components/CURL_AR.php

Код: Выделить всё

public function inet()
    {
        Yii::app()->controllerMap['CURL_AR']=>array(
            'class'=>dirname(__FILE__).'/CURL_ARController.php',
        );
    } 
controllers/CURL_ARController.php

Код: Выделить всё

public function actionCURL()
    {
        ...
    } 
и добавить в config/main.php

Код: Выделить всё

        'controllerMap' => array(
            'CURL_AR' => array(
                'class' => 'ext.EMPI.EMPIController',
                'site_success_url' => array('dddd/dddd'),
                'onComplited' => array('Order','Complited'),
            )
        ),
 
А кто первым вызывается контроллер или компонент, который вызывает контроллер? Или я что-то упустил?
fowork1
Сообщения: 34
Зарегистрирован: 2011.10.27, 16:35

Re: curl через ActiveRecord

Сообщение fowork1 »

Извиняюсь, что прыгаю, но

Сейчас нашёл готовый компонент для работы с CURL(http://www.yiiframework.com/extension/curl/) и прикрутил для проверки к контроллеру. Работает. Но он реализаван из CApplicationComponent.
Возник вопрос как его прикрутить к модели так, чтобы она (наследуемая от CActiveRecord) стала работать с компонентом как с источником данных, а не ругаться на него, мол это не база данных.
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: curl через ActiveRecord

Сообщение Nafania »

fowork1 писал(а):Извиняюсь, что прыгаю, но

Сейчас нашёл готовый компонент для работы с CURL(http://www.yiiframework.com/extension/curl/) и прикрутил для проверки к контроллеру. Работает. Но он реализаван из CApplicationComponent.
Возник вопрос как его прикрутить к модели так, чтобы она (наследуемая от CActiveRecord) стала работать с компонентом как с источником данных, а не ругаться на него, мол это не база данных.
Это просто обертка для курл. Я рекомендую все же вам ehttpclient, он удобнее намного.
Создайте виртуальную модель, без базы.
fowork1
Сообщения: 34
Зарегистрирован: 2011.10.27, 16:35

Re: curl через ActiveRecord

Сообщение fowork1 »

Создайте виртуальную модель, без базы
Буду очень благодарен, если подскажите, как это сделать или в каком направлении искать инфу.
fowork1
Сообщения: 34
Зарегистрирован: 2011.10.27, 16:35

Re: curl через ActiveRecord

Сообщение fowork1 »

Что, совсем никто ничего подсказать не может? :cry:
fowork1
Сообщения: 34
Зарегистрирован: 2011.10.27, 16:35

Re: curl через ActiveRecord

Сообщение fowork1 »

А что такое ehttpclient и ка его использовать? можно ссылку?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: curl через ActiveRecord

Сообщение samdark »

fowork1
Сообщения: 34
Зарегистрирован: 2011.10.27, 16:35

Re: curl через ActiveRecord

Сообщение fowork1 »

Я так понимаю, что это тоже обёртка. Мне в принципе не важно какую обёртку использовать. Проблема в том, чтобы её встроить в структуру yii
Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

Re: curl через ActiveRecord

Сообщение because »

fowork1 писал(а):Что, совсем никто ничего подсказать не может? :cry:
создаем компонент CComponent или модель CModel, в нем описываем метод getDataFromCurl(), методом получаем данные. на основе этих данных запрашиваем связанные данные из базы и формируем выходной массив - это можно тоже завернуть в метод, например prepareData().
RTFM !
fowork1
Сообщения: 34
Зарегистрирован: 2011.10.27, 16:35

Re: curl через ActiveRecord

Сообщение fowork1 »

спасибо, что откликнулись, Because!
because писал(а): создаем компонент CComponent или модель CModel
Делал от CModel
because писал(а):, в нем описываем метод getDataFromCurl(), методом получаем данные. на основе этих данных запрашиваем связанные данные из базы и формируем выходной массив - это можно тоже завернуть в метод, например prepareData().
тут ситуация несколько сложнее. Если бы сделать один запрос по CURl, то конечно отдельный метод и нет проблем. Задача стоит сделать паралель CActiveRecord, чтобы с ней можно было работать практически так же в рамках REST запросов, только данные должны приходить не через соединение с базой, а через CURL.

Сейчас пытаюсь реализовать запись данных после получения в таком же формате, как это делает AtiveRecord
fowork1
Сообщения: 34
Зарегистрирован: 2011.10.27, 16:35

Re: curl через ActiveRecord

Сообщение fowork1 »

Пока сделал следующим образом:
Есть класс, наследуемый от ActiveRecord. В нём есть хранилище экземпляров самого себя (_models). И есть класс, с переменной columns, который хранится в _md.
Так же есть несколько модифицированные методы: model(), attributeNames(), getMetaData().

Пока оно весьма бардачно, но зато данные бегают и для контроллера выглядит так же, как обычный ActiveRecord :)
Ответить