ФорумПрограммированиеPHP для идиотов → protected properties in Zend_Registry

protected properties in Zend_Registry

  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 12 апреля 2010 г. 16:56

    Невозможно с регистра синглтоном подгрузить какоето свойство, записанное в ини-файле. Просто потому что все те свойства protected.
    Итого чтобы извлечь параметры доступа к бд, мне пришлось обращаться к самому ини

    $config = new Zend_Config_Ini($_SERVER["DOCUMENT_ROOT"].'/application/config.ini', 'general');
    $grid = new mysqlphpgrid($config->db->config->host, $config->db->config->username, $config->db->config->password, $config->db->config->dbname, "phrases");


    Я понимаю, что так должно быть, что это политика зенда. С одной стороны правильно - нефиг делать параметры публичными если они юзаються лишь в рамках самого зенда… зенд сам все подтянет для своего Zend_Db… Но с другой стороны, если у меня сторонний плагин в конструктор класса которого нужно положить параметры доступа к бд, то уже не смогу с регистра взять… все свойства запротекченные…

    Я так понимаю это по дефолту в регистре те свойства в protected стоят.
    Я вообще правильно поступил, когда обратился в параметрам бд непосредственно в сам конфиг-ини? Или все же можно както через регистр извлечь то что мне нужно?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 12 апреля 2010 г. 17:02, спустя 6 минут 12 секунд

    Rotten, на интерес покажи как выглядит config.ini плз
    Спустя 16 сек.
    хосты и тп замазать можешь, мне не доступы а структура нажны
    Сапожник без сапог
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 12 апреля 2010 г. 17:04, спустя 1 минуту 18 секунд

    phpdude, Та в принципе так как "в книжке написано")..
    [general]

    db.adapter = PDO_MYSQL

    db.config.host = localhost

    db.config.username = root

    db.config.password = m45Q1t00rpsw0rd

    db.config.dbname = easywake



    search.index.path = ../data/search_indexes

    search.url = http://dev.hotelexecutive.com/hotelexecutive/index

    search.level = 2 ; 0 - the only main page will be indexed


    p.s. я не создавал этот файл)
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 12 апреля 2010 г. 17:05, спустя 1 минуту 38 секунд

    Rotten, гут, у меня чтото похожее. увидел просто "сходство" из кода:)
    Сапожник без сапог
  • Ewg777

    Сообщения: 510 Репутация: N Группа: Джедаи

    Spritz 12 апреля 2010 г. 17:30, спустя 25 минут 1 секунду

    Причём здесь protected? В загрузчике есть getOption.
    Спустя 96 сек.
    $_SERVER["DOCUMENT_ROOT"].'/application/config.ini'
    APPLICATION_PATH для идиотов.

    с регистра синглтоном подгрузить какоето свойство,
    Как пытались? Записать сначала его туда пробовали?
    Спустя 192 сек.
    Где здесь Registry???
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 12 апреля 2010 г. 17:47, спустя 17 минут 8 секунд

    Ewg777, Успокойся, ты чего)….

    свойства записаны в регистри - это и есть пропарсанный ини файл, который для удобства конвертируется в массив…

    вот в началае, как и во всех типичных примерах…

    // load configuration
    $config = new Zend_Config_Ini('./application/config.ini', 'general');
    Zend_Registry::set('config', $config);

    // setup database
    $db = Zend_Db::factory($config->db->adapter,
    $config->db->config->toArray());


    Zend_Db_Table::setDefaultAdapter($db);
    Zend_Registry::set('db', $db);

  • Ewg777

    Сообщения: 510 Репутация: N Группа: Джедаи

    Spritz 12 апреля 2010 г. 17:54, спустя 6 минут 2 секунды

    Rotten, "вот в началае, как и во всех типичных примерах…" не понимаю смысла этих действий. Т.е. для чего так сложно и извратно?
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 12 апреля 2010 г. 23:05, спустя 5 часов 11 минут 34 секунды

    Rotten, у тебя есть готовый объект db в реестре. любой плагин должен использовать его, а не свой собственный вариант db.
    ιιlllιlllι унц-унц
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 12 апреля 2010 г. 23:16, спустя 10 минут 52 секунды

    Хадыщь:
    $db = Zend_Db::factory($config->db);
    и ворошить конфиг не надо.

    Старая верся ZF? =)

    А ты уверен, что считал конфиг, очень странно, что он не даёт прочитать данные, Zend_Config может ругаться только если данных нет и он ридонли (по умолчанию конфиг создаётся только для чтения), и ты посути пытаешься их создать ($config->db->config->host - два сеттера, один геттер, если конфиг пустой)
    Work, buy, consume, die
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 14 апреля 2010 г. 12:44, спустя 1 день 13 часов 28 минут

    Мой способ, которым я извлекаю из ини - рабочий, все гуд. Так и в примерах на офсайте в Overview написано.
    а вот с другими сопособами, в т.ч. и с
    $db = Zend_Db::factory($config->db);


    никак. Тоесть в них хранятся нужные мне свойства, но они все в protected. artoodetoo видимо прав: Политика зенда предусматривает использование данных с зенд_регистри только в рамках своих плагинов. Вот только в моем случае плагинов нет: мне нужно тупо извлечь параметры доступа к бд в виде массива/простых переменных.
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 14 апреля 2010 г. 12:54, спустя 9 минут 35 секунд

    Naaayh, и кстати..
    не
    $db = Zend_Db::factory($config->db);


    а
     $db = Zend_Db::factory($config->db->adapter,
    $config->db->config->toArray());

    А при
    echo $db->_config["host"];

    получаем вот такое
    Fatal error:  Cannot access protected property Zend_Db_Adapter_Pdo_Mysql::$_config in /var/www/html/application/controllers/AdminController.php on line 87

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 14 апреля 2010 г. 13:20, спустя 26 минут 1 секунду

    Rotten, а подчеркивание не о чем не гвоорит?

    echo $db->_config["host"];

    вроде как это знак закрытых свойств
    Сапожник без сапог
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 14 апреля 2010 г. 13:22, спустя 1 минуту 37 секунд

    ну да… да я просто в лишний раз написал, так на всяк случай, чтобы не было недоразумений)..
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 14 апреля 2010 г. 14:59, спустя 1 час 37 минут 30 секунд

    ZF 1.6.2
    include ("Zend/Loader.php");
    Zend_Loader::registerAutoload();

    $config = new Zend_Config_Ini(APPLICATION_PATH . '/config/config.ini', 'global');
    $registry = Zend_Registry::getInstance();
    $registry->set('config', $config);

    $tmp = $registry->get('config');

    // тут никаких ошибок, выводит localhost<br />username<br />password
    echo $tmp->database->params->host . '<br />';
    echo $tmp->database->params->username . '<br />';
    echo $tmp->database->params->password;

    // не надо этого: $config->db->adapter, $config->db->config->toArray()
    // если ини файл такой как ниже написано, все работает и так
    $db = Zend_Db::factory($config->database);
    Zend_Db_Table::setDefaultAdapter($db);
    Инифайл
    [global]
    database.adapter = pdo_mysql
    database.params.host = localhost
    database.params.username = username
    database.params.password = "password"
    database.params.dbname = "не скажу =)"
    Work, buy, consume, die
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 14 апреля 2010 г. 15:07, спустя 8 минут 20 секунд

    А во вижу, у тебя конфиг не такой, какой требуется для зенд_дб, поэтому фабрике нужно передавать лишние параметры, юзай структуру инифайла как написано выше.
    И кстати да, что за бред $db->_config["host"]; причём тут регистри, если ты из объекта бд пытаешься свойства соединения получить, это естественно, что они протектед.
    Используй Zend_Registry::getInstance()->set('config', $config), а где надо $config = Zend_Registry::getInstance()->get('config'), и создавай новое соединение с бд, или что там тебе надо сделать.
    Спустя 119 сек.
    Похоже ты тёплое с мягким путаешь, регисти это одно а дб это другое, политика зенда тут непричём, просто ты неоттуда данные пытаешься получить =)
    Work, buy, consume, die

Пожалуйста, авторизуйтесь, чтобы написать комментарий!