4

zfcUser 登録フォームで Figlet を reCaptcha に置き換えようとしています。これを達成する方法の部分的な説明はhttps://github.com/ZF-Commons/ZfcUser#changeing-registration-captcha-elementにありますが、完全な説明はありません。

README.md ファイルを確認すると、これを達成する方法に関する 2 段階の指示がありますが、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. お楽しみください!:)

4

1 に答える 1

3

これは私がやった方法です。最善または正しい方法ではないかもしれませんが、私にとってはうまくいきました:

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 キーを格納するだけであり、バージョン管理したくないためです。

アプリケーションの起動時に、すべての構成ファイルが 1 つのアレイにマージされます。基本的に、ZfcUserドキュメントは無視してください。または、他の誰かがそのように機能させる方法を説明できるかもしれません。

コードの 3 番目のブロックは zfcuser.global.php です。

于 2013-05-22T13:23:19.530 に答える