Framework yii : нужна помощь с проектировкой компонента

Тема в разделе "Другие языки", создана пользователем unsiker, 8 янв 2012.

Модераторы: Цукер
  1. unsiker

    unsiker

    Регистр.:
    6 июн 2008
    Сообщения:
    465
    Симпатии:
    172
    Доброго времени суток, надеюсь есть специалисты по фреймворку Yii, которые могут помочь в данном вопросе. Итак суть дела
    Нужно разработать компонент, который будет работать с базой фильма с одного сервиса. В связи с чем нужно написать реализацию. Данный компонент будет разбит на 2 файла с соответствующими класам (возможно их будет больше).
    Первая часть будет осуществлять подключение к сервису.
    PHP:
    class EMovieConnect {
        function 
    connect($conn_str$user$pass){...}
        function 
    status(){...}
    }
    Вторая будет отсылать/принимать информацию.
    PHP:
    class EMovieCommand {
       function  
    searchMovie($str){...}
       function  
    lastMovie(){...}
    }
    Само подключение должно выглядеть следующим образом:
    PHP:
    'components'=>array(
        
    'movie'=>array(
            
    'class' => 'path.to.EMovieComponent',
            
    'user'  => 'user',
            
    'pass'  => 'password',

        ),
    ),
    а работа с компонентом должна быть максимально простая
    PHP:
    Yii::app()->movie->connect();
    Yii::app()->movie->search('my movie');
    Подскажите как должен выглядеть код компонента?
    так что б он включал и первый и второй клас,
    Буду благодарен за любую помощь в этом вопросе
     
  2. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    дкласс EMovieComponent делаешь наследником от CApplicationComponent
    ну или главное чтоб компонент реализовывал интерфейс IApplicationComponent ( там посути 2 метода )

    потом в файле класса EMovieComponent делаешь либо обычный импорт остальных классов/файлов
    PHP:
    require_once dirname(__FILE__).DIRECTORY_SEPARATOR.'EMovieConnect.php';
      require_once 
    dirname(__FILE__).DIRECTORY_SEPARATOR.'EMovieCommand.php';
     
    class  
    EMovieComponent ...
    {
       

    либо инклюдишь через конфиг
    PHP:
    'import'=>array(
    ...
      
    'ext. EMovie.*',
    ...
    ),
    собсно




    ну а по коду либо в классе EMovieComponent делать метотоды-обертки для остальных классов аля
    PHP:
     
    class  EMovieComponent ...
    {
       
        public function 
    __constructor()
      {
              
    $this->connect = new EMovieConnect(...)
      } 
     
      public function 
    conect()
    {
        
    $this->connect->connect() ;


     
     
    либо волшебными методами как вот здесь реализовано




     
    unsiker нравится это.