Zend Framework 2: как правильно заменить Figlet на reCaptcha на zfcUser

Я пытаюсь заменить Figlet на reCaptcha в регистрационной форме zfcUser. Частичные инструкции о том, как это сделать, можно найти на https://github.com/ZF-Commons/ZfcUser#changing-registration-captcha-element, но полной инструкции не существует.

Проверка файла README.md содержит двухэтапную инструкцию о том, как это сделать, но все же CAPTCHA использует Figlet при отображении в форме.

Кто-нибудь успешно реализовал это? Мне действительно нужна помощь в этом.

Заранее спасибо.


РЕДАКТИРОВАТЬ: Вот проверенное рабочее решение, которое я разработал:

<сильный>1. Добавить в composer.json

// Add the lines below under the "require" element:
    "require": {
        "php": ">=5.3.3",
        "zendframework/zendframework": ">2.2.0rc1",
        "zendframework/zendservice-recaptcha": "2.*"

}

<сильный>2. Перейдите в каталог установки ZF2 вашего проекта и выполните следующую команду:

php composer.phar update

<сильный>3. Замените или создайте config/autoload/database.global.php на:

<?php
$config = array(
    'dbdriver' => 'pdo',
    'dbhost' => 'localhost',
    'dbport' => '3306',
    'dbname' => 'CHANGEME',
    'dbuser' => 'CHANGEME',
    'dbpass' => 'CHANGEME',
);

return array(
    'service_manager' => array(
        'factories' => array(
            'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
        ),
    ),
    'db' => array(
        'driver'    => 'pdo',
        'dsn'       => 'mysql:dbname='.$config['dbname'].';host='.$config['dbhost'],
        'username'  => $config['dbuser'],
        'password'  => $config['dbpass'],
    ),
);

4: Выполните это на своем сервере MySQL:

CREATE TABLE `user`
(
    `user_id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `username` VARCHAR(255) DEFAULT NULL UNIQUE,
    `email` VARCHAR(255) DEFAULT NULL UNIQUE,
    `display_name` VARCHAR(50) DEFAULT NULL,
    `password` VARCHAR(128) NOT NULL,
    `state` SMALLINT UNSIGNED
) ENGINE=InnoDB CHARSET="utf8";

<сильный>5. Создайте/замените config/autoload/recaptcha.global.php на:

<?php
define('RECAPTCHA_PRIVATE_KEY','CHANGEME');
define('RECAPTCHA_PUBLIC_KEY','CHANGEME');

return array(
    'zfcuser' => array(
        'form_captcha_options' => array(
            'class'   => 'Zend\Captcha\ReCaptcha',
            'options' => array(
                'privkey' => RECAPTCHA_PRIVATE_KEY,
                'pubkey'  => RECAPTCHA_PUBLIC_KEY,
            ),
        ),
    ),

    'di'=> array(
        'instance'=>array(
            'alias'=>array(
                'recaptcha_element' => 'Zend\Form\Element\Captcha',
            ),

            'ZfcUser\Form\Register' => array(
                'parameters' => array(
                    'captcha_element'=>'recaptcha_element',
                ),
            ),
        ),
    ),
);

<сильный>6. Создайте/замените config/autoload/zfcuser.global.php на:

<?php
$settings = array(    
    'enable_registration' => true,
    'enable_username' => true,
    'auth_adapters' => array( 100 => 'ZfcUser\Authentication\Adapter\Db' ),
    'enable_display_name' => false,
    'auth_identity_fields' => array( 'email' ),
    'use_registration_form_captcha' => true,
    'user_login_widget_view_template' => 'zfc-user/user/login.phtml',
);


return array(
    'zfcuser' => $settings,
    'service_manager' => array(
        'aliases' => array(
            'zfcuser_zend_db_adapter' => (isset($settings['zend_db_adapter'])) ? $settings['zend_db_adapter']: 'Zend\Db\Adapter\Adapter',
        ),
    ),
);

<сильный>7. Перейдите по адресу http://yourdomain.com/user.

<сильный>8. Наслаждаться! :)


person Jhourlad Estrella    schedule 22.05.2013    source источник
comment
Привет, вы объясните, как использовать эту функцию в форме и контроллере   -  person Kathiravan    schedule 02.07.2013
comment
В контроллере ничего делать не нужно. Просто следуйте решению, которое я опубликовал, и все готово. Формы входа и регистрации уже готовы. Чтобы получить доступ к форме входа, просто перейдите на yourdomain.com/user или на любой другой домен, который вы используете.   -  person Jhourlad Estrella    schedule 03.07.2013
comment
Спасибо за ваш ответ   -  person Kathiravan    schedule 04.07.2013
comment
Без проблем. Рад помочь, чем смогу. :)   -  person Jhourlad Estrella    schedule 05.07.2013
comment
большое спасибо :) работает как шарм   -  person ufk    schedule 24.09.2013


Ответы (1)


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

Добавьте сервис recaptcha в свой composer.json файл:

"require": {
    "Zendframework/zendservice-recaptcha": "2.*"
}

Запустите composer, чтобы получить сервис. Затем нужно указать конфиг ReCaptcha. Я создал отдельный файл конфигурации для хранения ключей ReCaptcha:

//zfcuser.local.php
return array(
    'zfcuser' => array(
        'form_captcha_options' => array(
            'options' => array(
                'privkey' => RECAPTCHA_PRIVATE_KEY,   
                'pubkey'  => RECAPTCHA_PUBLIC_KEY,
            ),
        ),
    ),
); 

Тогда конфиг ZfcUser капчи выглядит так, говоря ей использовать сервис ReCaptcha:

//zfcuser.global.php
'form_captcha_options' => array(
    'class'   => 'Zend\Captcha\ReCaptcha',
    'options' => array(
        'wordLen'    => 6,
        'expiration' => 300,
        'timeout'    => 300,
     ),
),

Изменить:

Вам не нужен recaptcha.global.php. Вы можете называть файл конфигурации как угодно, главное, чтобы он заканчивался на .global.php или .local.php. Обычно вы называете вещи .local.php, когда не хотите, чтобы они находились в системе контроля версий.

В этом случае я назвал файл zfcuser.local.php, потому что все, что он делает, — это хранит ключи ReCaptcha, и я не хотел, чтобы они находились в контроле версий.

Все файлы конфигурации объединяются в один массив при запуске приложения. В общем, игнорируйте документацию ZfcUser. Или, может быть, кто-то еще может объяснить, как заставить его работать таким образом.

Третий блок кода — zfcuser.global.php.

person Aydin Hassan    schedule 22.05.2013
comment
Привет. Несколько пояснений: 1. А как насчет изменений в recaptcha.global.php и zfuser.global.php, указанных в официальной документации? Должен ли я держать их? 2. В какой файл мне поместить третий блок кода, который вы предоставили? - person Jhourlad Estrella; 23.05.2013
comment
Спасибо. Я сделал свою работу, унаследовав исходный класс от /vendor и выполняя моды там, а также добавив параметры в zfcuser.global.php и recaptcha.global.php. В любом случае, я присуждаю вам балл. Молодец! - person Jhourlad Estrella; 24.05.2013