2016-08-10 7 views
0

私はログインフォームにcaptchaを追加しようとしています。Yii-2アプリケーションにcaptchaを追加するには?

私の環境:PHP 5.4.45 TS

    • のYii 2
    • は(10

    login.phpLoginForm.phpSiteController.phpで、私は次のように追加10.0

  • のWindowsのIIS関連する部分のみを示しています)。

    バックエンド\ビュー\サイトの\ login.php:

    use yii\captcha\Captcha; 
    ... 
    <?= $form->field($model, 'captcha')->widget(Captcha::className()) ?> 
    ... 
    

    共通\モデル\ LoginForm.php:

    public function actions() 
    { 
        return [ 
         ... 
         'captcha' => [ 
          'class' => 'yii\captcha\CaptchaAction', 
    //    'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null, 
         ], 
        ]; 
    } 
    

    I:

    ... 
    public $captcha; 
    ... 
    public function rules() 
    { 
        return [ 
         ... 
         [['username', 'password', 'captcha'], 'required'],   
         ['captcha', 'captcha'], 
        ]; 
    } 
    

    バックエンド\コントローラはSiteController.php \ダウンロードしてインストールしましたImageMagick-7.0.2-Q16

    here私はphp_imagick-3.4.1-5.4-ts-vc9-x86.zipをダウンロードし、そこからphp_imagick.dllを抽出します。

    ... 
    [PHP_IMAGICK] 
    extension=php_imagick.dll 
    ... 
    

    その後、IISを再起動しますが、キャプチャが表示されていないと私はログに次の項目を参照してください:次にphp.ini/php/ext/

    でphp_imagick.dllを追加しました私は、次の追加

    2016-08-10 07:28:21 [127.0.0.1][-][h1a65krn8scqc9auk56flmesi6][error][yii\base\InvalidConfigException] exception 'yii\base\InvalidConfigException' with message 'Either GD PHP extension with FreeType support or ImageMagick PHP extension with PNG support is required.' in C:\projects\aisnew\vendor\yiisoft\yii2\captcha\Captcha.php:180 
    

    オペレーティングシステムの再起動後:

    2016-08-10 07:01:22 [127.0.0.1][-][h1a65krn8scqc9auk56flmesi6][error][yii\base\ErrorException:32] exception 'yii\base\ErrorException' with message 'PHP Startup: ' in Unknown:0 
    

    最新のバージョンがWindows 10で動作していますが、Visual C++ 2013再頒布可能パッケージをインストールする必要があります。このパッケージがインストールされていることを確認しました。

    Yii-2アプリケーションでcaptchaを追加するにはどうすればよいですか?私はImageMagickとphp_imagick.dllの異なる組み合わせを試みましたが、何も動作していません。

    私は情報に非常に感謝します。ありがとうございます。

  • +1

    代替ソリューションをご利用いただける方は、https://www.google.com/recaptcha/intro/index.html – Jason

    +0

    をご覧ください。迅速なコメントをいただきありがとうございます。はい、私は代替ソリューションにオープンしています。私はそれを試してみます。 –

    +0

    完璧に動作します、@ Jasonありがとうございます。私は本当にそれが好きだった、私は生産のこのソリューションを残します。また、この質問を開いたままにして、私はimagicを使ってこれを行う方法を知りたい。 –

    答えて

    2

    私はこれは私がやっていること

    <?= $form->field($model, 'captcha')->widget(Captcha::className(), 
          ['template' => '<div class="captcha_img">{image}</div>' 
           . '<a class="refreshcaptcha" href="#">' 
           . Html::img('/images/imageName.png',[]).'</a>' 
           . 'Verification Code{input}', 
          ])->label(FALSE); ?> 
    

    を動作するはずだと思うさは、リフレッシュキャプチャ画像(適したパスを提供)、フィールドにラベルと入力フィールドをキャプチャ画像を含むテンプレートを追加しましたテキストのために。

    +1

    いくつかの説明が答えを改善し、将来の読者を助ける –

    +1

    コードはまっすぐです。私はちょうどcaptchaイメージ、リフレッシュcaptchaイメージ(そのイメージのパスは開発者の側から提供される)、ラベル(検証コード)とテキスト入力フィールドがあります。 –

    +0

    いいですね。あなたの答えにこのコメントを入れて、私はそれをupvote –