0 フォロワー

クラス yii\captcha\CaptchaAction

継承yii\captcha\CaptchaAction » yii\base\Action » yii\base\Component » yii\base\BaseObject
実装yii\base\Configurable
利用可能なバージョン2.0
ソースコード https://github.com/yiisoft/yii2/blob/master/framework/captcha/CaptchaAction.php

CaptchaAction は CAPTCHA 画像をレンダリングします。

CaptchaAction は、yii\captcha\Captcha および yii\captcha\CaptchaValidator とともに使用して、CAPTCHA 機能を提供します。

CaptchaAction のプロパティを構成することで、フォントの色、背景色など、生成された CAPTCHA 画像の外観をカスタマイズできます。

CaptchaAction には、GD2 拡張機能または ImageMagick PHP 拡張機能のいずれかが必要です。

CAPTCHA の使用には、次の手順が含まれます。

  1. yii\web\Controller::actions() をオーバーライドし、ID 'captcha' を持つクラス CaptchaAction のアクションを登録します。
  2. フォームモデルで、ユーザーが入力した認証コードを保存する属性を宣言し、'captcha' バリデーターによって検証される属性を宣言します。
  3. コントローラービューで、フォームに yii\captcha\Captcha ウィジェットを挿入します。

パブリックプロパティ

継承されたプロパティを隠す

プロパティ タイプ 説明 定義元
$backColor integer 背景色。 yii\captcha\CaptchaAction
$behaviors yii\base\Behavior[] このコンポーネントにアタッチされたビヘイビアのリスト。 yii\base\Component
$controller yii\base\Controller|yii\web\Controller|yii\console\Controller このアクションを所有するコントローラー yii\base\Action
$fixedVerifyCode string|null 固定された認証コード。 yii\captcha\CaptchaAction
$fontFile string TrueType フォントファイル。 yii\captcha\CaptchaAction
$foreColor integer フォントの色。 yii\captcha\CaptchaAction
$height integer 生成された CAPTCHA 画像の高さ。 yii\captcha\CaptchaAction
$id string アクションの ID yii\base\Action
$imageLibrary string|null 使用するレンダリングライブラリ。 yii\captcha\CaptchaAction
$maxLength integer ランダムに生成された単語の最大長。 yii\captcha\CaptchaAction
$minLength integer ランダムに生成された単語の最小長。 yii\captcha\CaptchaAction
$offset integer 文字間のオフセット。 yii\captcha\CaptchaAction
$padding integer テキストの周りのパディング。 yii\captcha\CaptchaAction
$testLimit integer 同じ CAPTCHA を表示する回数。 yii\captcha\CaptchaAction
$transparent boolean 透明な背景を使用するかどうか。 yii\captcha\CaptchaAction
$uniqueId string アプリケーション全体でのこのアクションの一意の ID。 yii\base\Action
$verifyCode string 認証コード。 yii\captcha\CaptchaAction
$width integer 生成された CAPTCHA 画像の幅。 yii\captcha\CaptchaAction

パブリックメソッド

継承されたメソッドを隠す

メソッド 説明 定義元
__call() クラスメソッドではない名前付きメソッドを呼び出します。 yii\base\Component
__clone() このメソッドは、既存のものを複製してオブジェクトが作成された後に呼び出されます。 yii\base\Component
__construct() コンストラクタ。 yii\base\Action
__get() コンポーネントプロパティの値を返します。 yii\base\Component
__isset() プロパティが設定されている、つまり定義されていて null でないかどうかを確認します。 yii\base\Component
__set() コンポーネントプロパティの値を設定します。 yii\base\Component
__unset() コンポーネントプロパティを null に設定します。 yii\base\Component
attachBehavior() このコンポーネントにビヘイビアをアタッチします。 yii\base\Component
attachBehaviors() コンポーネントにビヘイビアのリストをアタッチします。 yii\base\Component
behaviors() このコンポーネントが動作するビヘイビアのリストを返します。 yii\base\Component
canGetProperty() プロパティを読み取ることができるかどうかを示す値を返します。 yii\base\Component
canSetProperty() プロパティを設定できるかどうかを示す値を返します。 yii\base\Component
className() このクラスの完全修飾名を返します。 yii\base\BaseObject
detachBehavior() コンポーネントからビヘイビアをデタッチします。 yii\base\Component
detachBehaviors() コンポーネントからすべてのビヘイビアをデタッチします。 yii\base\Component
ensureBehaviors() behaviors() で宣言されたビヘイビアがこのコンポーネントにアタッチされていることを確認します。 yii\base\Component
generateValidationHash() クライアント側の検証に使用できるハッシュコードを生成します。 yii\captcha\CaptchaAction
getBehavior() 名前付きビヘイビアオブジェクトを返します。 yii\base\Component
getBehaviors() このコンポーネントにアタッチされたすべてのビヘイビアを返します。 yii\base\Component
getUniqueId() アプリケーション全体でのこのアクションの一意の ID を返します。 yii\base\Action
getVerifyCode() 認証コードを取得します。 yii\captcha\CaptchaAction
hasEventHandlers() 名前付きイベントにアタッチされたハンドラーがあるかどうかを示す値を返します。 yii\base\Component
hasMethod() メソッドが定義されているかどうかを示す値を返します。 yii\base\Component
hasProperty() このコンポーネントにプロパティが定義されているかどうかを示す値を返します。 yii\base\Component
init() アクションを初期化します。 yii\captcha\CaptchaAction
off() このコンポーネントから既存のイベントハンドラーをデタッチします。 yii\base\Component
on() イベントハンドラーをイベントにアタッチします。 yii\base\Component
run() アクションを実行します。 yii\captcha\CaptchaAction
runWithParams() 指定されたパラメーターを使用してこのアクションを実行します。 yii\base\Action
trigger() イベントをトリガーします。 yii\base\Component
validate() 入力が生成されたコードと一致するかどうかを確認するために検証します。 yii\captcha\CaptchaAction

保護されたメソッド

継承されたメソッドを隠す

メソッド 説明 定義元
afterRun() このメソッドは、run() が実行された直後に呼び出されます。 yii\base\Action
beforeRun() このメソッドは、run() が実行される直前に呼び出されます。 yii\base\Action
generateVerifyCode() 新しい認証コードを生成します。 yii\captcha\CaptchaAction
getSessionKey() 認証コードを保存するために使用されるセッション変数名を返します。 yii\captcha\CaptchaAction
renderImage() CAPTCHA画像を描画します。 yii\captcha\CaptchaAction
renderImageByGD() GDライブラリを使用して、コードに基づいてCAPTCHA画像を描画します。 yii\captcha\CaptchaAction
renderImageByImagick() ImageMagickライブラリを使用して、コードに基づいてCAPTCHA画像を描画します。 yii\captcha\CaptchaAction
setHttpHeaders() 画像レスポンスに必要なHTTPヘッダーを設定します。 yii\captcha\CaptchaAction

定数

継承された定数を隠す

定数 説明 定義元
REFRESH_GET_VAR 'refresh' CAPTCHA画像を再生成するかどうかを示すGETパラメータの名前。 yii\captcha\CaptchaAction

プロパティの詳細

継承されたプロパティを隠す

$backColor public プロパティ

背景色。たとえば、0x55FF00。デフォルトは0xFFFFFFで、白色を意味します。

public integer $backColor 0xffffff
$fixedVerifyCode public プロパティ

固定認証コード。このプロパティが設定されている場合、getVerifyCode() は常にこのプロパティの値を返します。これは主に、テストを実行するたびに同じ認証コードを再現できるようにしたい自動テストで使用されます。設定されていない場合は、認証コードがランダムに生成されることを意味します。

$fontFile public プロパティ

TrueTypeフォントファイル。これは、ファイルパスまたはパスエイリアスのいずれかになります。

public string $fontFile '@yii/captcha/SpicyRice.ttf'
$foreColor public プロパティ

フォントの色。たとえば、0x55FF00。デフォルトは0x2040A0(青色)です。

public integer $foreColor 0x2040a0
$height public プロパティ

生成されたCAPTCHA画像の高さ。デフォルトは50です。

public integer $height 50
$imageLibrary public プロパティ (バージョン 2.0.7 以降で利用可能)

使用するレンダリングライブラリ。現在サポートされているのは 'gd' と 'imagick' のみです。設定されていない場合、ライブラリは自動的に決定されます。

public string|null $imageLibrary null
$maxLength public プロパティ

ランダムに生成される単語の最大長。デフォルトは7です。

public integer $maxLength 7
$minLength public プロパティ

ランダムに生成される単語の最小長。デフォルトは6です。

public integer $minLength 6
$offset public プロパティ

文字間のオフセット。デフォルトは-2です。このプロパティを調整して、CAPTCHAの可読性を低下または向上させることができます。

public integer $offset = -2
$padding public プロパティ

テキストの周囲のパディング。デフォルトは2です。

public integer $padding 2
$testLimit public プロパティ

同じCAPTCHAを表示する回数。デフォルトは3です。0以下の値は、テストが無制限であることを意味します(バージョン1.1.2以降で利用可能)。

public integer $testLimit 3
$transparent public プロパティ

透明な背景を使用するかどうか。デフォルトはfalseです。

public boolean $transparent false
$verifyCode public プロパティ

認証コード。

public string $verifyCode null
$width public プロパティ

生成されるCAPTCHA画像の幅。デフォルトは120です。

public integer $width 120

メソッドの詳細

継承されたメソッドを隠す

__call() public メソッド

定義元: yii\base\Component::__call()

クラスメソッドではない名前付きメソッドを呼び出します。

このメソッドは、アタッチされたビヘイビアに指定された名前のメソッドがあるかどうかをチェックし、存在する場合は実行します。

不明なメソッドが呼び出されたときに暗黙的に呼び出されるPHPのマジックメソッドであるため、このメソッドを直接呼び出さないでください。

public mixed __call ( $name, $params )
$name string

メソッド名

$params array

メソッドのパラメータ

return mixed

メソッドの戻り値

throws yii\base\UnknownMethodException

不明なメソッドを呼び出した場合

                public function __call($name, $params)
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $object) {
        if ($object->hasMethod($name)) {
            return call_user_func_array([$object, $name], $params);
        }
    }
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__clone() public メソッド

定義元: yii\base\Component::__clone()

このメソッドは、既存のものを複製してオブジェクトが作成された後に呼び出されます。

古いオブジェクトにアタッチされているため、すべてのビヘイビアを削除します。

public void __clone ( )

                public function __clone()
{
    $this->_events = [];
    $this->_eventWildcards = [];
    $this->_behaviors = null;
}

            
__construct() public メソッド

定義元: yii\base\Action::__construct()

コンストラクタ。

public void __construct ( $id, $controller, $config = [] )
$id string

このアクションのID

$controller yii\base\Controller

このアクションを所有するコントローラー

$config array

オブジェクトのプロパティを初期化するために使用される名前と値のペア

                public function __construct($id, $controller, $config = [])
{
    $this->id = $id;
    $this->controller = $controller;
    parent::__construct($config);
}

            
__get() public メソッド

定義元: yii\base\Component::__get()

コンポーネントプロパティの値を返します。

このメソッドは以下の順序でチェックし、それに応じて動作します。

  • ゲッターによって定義されたプロパティ: ゲッターの結果を返します
  • ビヘイビアのプロパティ: ビヘイビアのプロパティ値を返します

このメソッドは、$value = $component->property; を実行するときに暗黙的に呼び出されるPHPのマジックメソッドであるため、直接呼び出さないでください。

参照: __set()

public mixed __get ( $name )
$name string

プロパティ名

return mixed

プロパティ値またはビヘイビアのプロパティの値

throws yii\base\UnknownPropertyException

プロパティが定義されていない場合

throws yii\base\InvalidCallException

プロパティが書き込み専用の場合

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        // read property, e.g. getName()
        return $this->$getter();
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name;
        }
    }
    if (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() public メソッド

定義元: yii\base\Component::__isset()

プロパティが設定されている、つまり定義されていて null でないかどうかを確認します。

このメソッドは以下の順序でチェックし、それに応じて動作します。

  • セッターによって定義されたプロパティ: プロパティが設定されているかどうかを返します
  • ビヘイビアのプロパティ: プロパティが設定されているかどうかを返します
  • 存在しないプロパティの場合は false を返します

このメソッドは、isset($component->property) を実行するときに暗黙的に呼び出されるPHPのマジックメソッドであるため、直接呼び出さないでください。

参照: https://www.php.net/manual/en/function.isset.php

public boolean __isset ( $name )
$name string

プロパティ名またはイベント名

return boolean

指定されたプロパティが設定されているかどうか

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name !== null;
        }
    }
    return false;
}

            
__set() public メソッド

定義元: yii\base\Component::__set()

コンポーネントプロパティの値を設定します。

このメソッドは以下の順序でチェックし、それに応じて動作します。

  • セッターによって定義されたプロパティ: プロパティ値を設定します
  • "on xyz" の形式のイベント: イベント "xyz" にハンドラーをアタッチします
  • "as xyz" の形式のビヘイビア: "xyz" という名前のビヘイビアをアタッチします
  • ビヘイビアのプロパティ: ビヘイビアのプロパティ値を設定します

このメソッドは、$component->property = $value; を実行するときに暗黙的に呼び出されるPHPのマジックメソッドであるため、直接呼び出さないでください。

参照: __get()

public void __set ( $name, $value )
$name string

プロパティ名またはイベント名

$value mixed

プロパティ値

throws yii\base\UnknownPropertyException

プロパティが定義されていない場合

throws yii\base\InvalidCallException

プロパティが読み取り専用の場合。

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        // set property
        $this->$setter($value);
        return;
    } elseif (strncmp($name, 'on ', 3) === 0) {
        // on event: attach event handler
        $this->on(trim(substr($name, 3)), $value);
        return;
    } elseif (strncmp($name, 'as ', 3) === 0) {
        // as behavior: attach behavior
        $name = trim(substr($name, 3));
        $this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = $value;
            return;
        }
    }
    if (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}

            
__unset() public メソッド

定義元: yii\base\Component::__unset()

コンポーネントプロパティを null に設定します。

このメソッドは以下の順序でチェックし、それに応じて動作します。

  • セッターによって定義されたプロパティ: プロパティ値を null に設定します
  • ビヘイビアのプロパティ: プロパティ値を null に設定します

このメソッドは、unset($component->property) を実行するときに暗黙的に呼び出されるPHPのマジックメソッドであるため、直接呼び出さないでください。

参照: https://www.php.net/manual/en/function.unset.php

public void __unset ( $name )
$name string

プロパティ名

throws yii\base\InvalidCallException

プロパティが読み取り専用の場合。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = null;
            return;
        }
    }
    throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}

            
afterRun() protected メソッド

定義元: yii\base\Action::afterRun()

このメソッドは、run() が実行された直後に呼び出されます。

アクション実行後の後処理を行うために、このメソッドをオーバーライドできます。

protected void afterRun ( )

                protected function afterRun()
{
}

            
attachBehavior() public メソッド

定義元: yii\base\Component::attachBehavior()

このコンポーネントにビヘイビアをアタッチします。

このメソッドは、与えられた設定に基づいてビヘイビアオブジェクトを作成します。その後、yii\base\Behavior::attach() メソッドを呼び出すことで、ビヘイビアオブジェクトがこのコンポーネントにアタッチされます。

関連: detachBehavior().

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name string

ビヘイビアの名前。

$behavior string|array|yii\base\Behavior

ビヘイビアの設定。以下のいずれかになります。

  • yii\base\Behavior オブジェクト
  • ビヘイビアクラスを指定する文字列
  • Yii::createObject() に渡してビヘイビアオブジェクトを作成するオブジェクト設定配列
return yii\base\Behavior

ビヘイビアオブジェクト

                public function attachBehavior($name, $behavior)
{
    $this->ensureBehaviors();
    return $this->attachBehaviorInternal($name, $behavior);
}

            
attachBehaviors() public メソッド

定義元: yii\base\Component::attachBehaviors()

コンポーネントにビヘイビアのリストをアタッチします。

各ビヘイビアは名前でインデックスされ、yii\base\Behavior オブジェクト、ビヘイビアクラスを指定する文字列、またはビヘイビアを作成するための設定配列である必要があります。

関連: attachBehavior().

public void attachBehaviors ( $behaviors )
$behaviors array

コンポーネントにアタッチされるビヘイビアのリスト

                public function attachBehaviors($behaviors)
{
    $this->ensureBehaviors();
    foreach ($behaviors as $name => $behavior) {
        $this->attachBehaviorInternal($name, $behavior);
    }
}

            
beforeRun() protected メソッド

定義元: yii\base\Action::beforeRun()

このメソッドは、run() が実行される直前に呼び出されます。

アクション実行の準備作業を行うために、このメソッドをオーバーライドできます。このメソッドが false を返すと、アクションはキャンセルされます。

protected boolean beforeRun ( )
return boolean

アクションを実行するかどうか。

                protected function beforeRun()
{
    return true;
}

            
behaviors() public メソッド

定義元: yii\base\Component::behaviors()

このコンポーネントが動作するビヘイビアのリストを返します。

子クラスは、ビヘイビアとして動作させたいものを指定するために、このメソッドをオーバーライドできます。

このメソッドの戻り値は、ビヘイビア名でインデックスされたビヘイビアオブジェクトまたは設定の配列である必要があります。ビヘイビア設定は、ビヘイビアクラスを指定する文字列か、以下の構造の配列のいずれかです。

'behaviorName' => [
    'class' => 'BehaviorClass',
    'property1' => 'value1',
    'property2' => 'value2',
]

ビヘイビアクラスは yii\base\Behavior を拡張する必要があることに注意してください。ビヘイビアは、名前を使用するか、匿名でアタッチできます。名前が配列キーとして使用されている場合、この名前を使用して、後で getBehavior() を使用してビヘイビアを取得するか、detachBehavior() を使用してデタッチできます。匿名のビヘイビアは、取得もデタッチもできません。

このメソッドで宣言されたビヘイビアは、自動的に(必要に応じて)コンポーネントにアタッチされます。

public array behaviors ( )
return array

ビヘイビアの設定。

                public function behaviors()
{
    return [];
}

            
canGetProperty() public メソッド

定義元: yii\base\Component::canGetProperty()

プロパティを読み取ることができるかどうかを示す値を返します。

プロパティは、以下の場合に読み取り可能です。

  • クラスが、指定された名前に関連付けられたゲッターメソッドを持っている場合(この場合、プロパティ名は大文字と小文字を区別しません)。
  • クラスが、指定された名前のメンバ変数を持っている場合($checkVars が true の場合)。
  • アタッチされたビヘイビアが、指定された名前の読み取り可能なプロパティを持っている場合($checkBehaviors が true の場合)。

関連: canSetProperty().

public boolean canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

プロパティ名

$checkVars boolean

メンバ変数をプロパティとして扱うかどうか

$checkBehaviors boolean

ビヘイビアのプロパティをこのコンポーネントのプロパティとして扱うかどうか

return boolean

プロパティが読み取り可能かどうか

                public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canGetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
canSetProperty() public メソッド

定義元: yii\base\Component::canSetProperty()

プロパティを設定できるかどうかを示す値を返します。

プロパティは、以下の場合に書き込み可能です。

  • クラスが、指定された名前に関連付けられたセッターメソッドを持っている場合(この場合、プロパティ名は大文字と小文字を区別しません)。
  • クラスが、指定された名前のメンバ変数を持っている場合($checkVars が true の場合)。
  • アタッチされたビヘイビアが、指定された名前の書き込み可能なプロパティを持っている場合($checkBehaviors が true の場合)。

関連: canGetProperty().

public boolean canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

プロパティ名

$checkVars boolean

メンバ変数をプロパティとして扱うかどうか

$checkBehaviors boolean

ビヘイビアのプロパティをこのコンポーネントのプロパティとして扱うかどうか

return boolean

プロパティが書き込み可能かどうか

                public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canSetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
className() public static メソッド
2.0.14 以降は非推奨。PHP >=5.5 では、代わりに ::class を使用してください。

定義元: yii\base\BaseObject::className()

このクラスの完全修飾名を返します。

public static string className ( )
return string

このクラスの完全修飾名。

                public static function className()
{
    return get_called_class();
}

            
detachBehavior() public メソッド

定義元: yii\base\Component::detachBehavior()

コンポーネントからビヘイビアをデタッチします。

ビヘイビアの yii\base\Behavior::detach() メソッドが呼び出されます。

public yii\base\Behavior|null detachBehavior ( $name )
$name string

ビヘイビアの名前。

return yii\base\Behavior|null

デタッチされたビヘイビア。ビヘイビアが存在しない場合は Null。

                public function detachBehavior($name)
{
    $this->ensureBehaviors();
    if (isset($this->_behaviors[$name])) {
        $behavior = $this->_behaviors[$name];
        unset($this->_behaviors[$name]);
        $behavior->detach();
        return $behavior;
    }
    return null;
}

            
detachBehaviors() public メソッド

定義元: yii\base\Component::detachBehaviors()

コンポーネントからすべてのビヘイビアをデタッチします。

public void detachBehaviors ( )

                public function detachBehaviors()
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $name => $behavior) {
        $this->detachBehavior($name);
    }
}

            
ensureBehaviors() public メソッド

定義元: yii\base\Component::ensureBehaviors()

behaviors() で宣言されたビヘイビアがこのコンポーネントにアタッチされていることを確認します。

public void ensureBehaviors ( )

                public function ensureBehaviors()
{
    if ($this->_behaviors === null) {
        $this->_behaviors = [];
        foreach ($this->behaviors() as $name => $behavior) {
            $this->attachBehaviorInternal($name, $behavior);
        }
    }
}

            
generateValidationHash() public メソッド

クライアント側の検証に使用できるハッシュコードを生成します。

public string generateValidationHash ( $code )
$code string

CAPTCHAコード

return string

CAPTCHAコードから生成されたハッシュコード

                public function generateValidationHash($code)
{
    for ($h = 0, $i = strlen($code) - 1; $i >= 0; --$i) {
        $h += ord($code[$i]) << $i;
    }
    return $h;
}

            
generateVerifyCode() protected メソッド

新しい認証コードを生成します。

protected string generateVerifyCode ( )
return string

生成された検証コード

                protected function generateVerifyCode()
{
    if ($this->minLength > $this->maxLength) {
        $this->maxLength = $this->minLength;
    }
    if ($this->minLength < 3) {
        $this->minLength = 3;
    }
    if ($this->maxLength > 20) {
        $this->maxLength = 20;
    }
    $length = random_int($this->minLength, $this->maxLength);
    $letters = 'bcdfghjklmnpqrstvwxyz';
    $vowels = 'aeiou';
    $code = '';
    for ($i = 0; $i < $length; ++$i) {
        if ($i % 2 && random_int(0, 10) > 2 || !($i % 2) && random_int(0, 10) > 9) {
            $code .= $vowels[random_int(0, 4)];
        } else {
            $code .= $letters[random_int(0, 20)];
        }
    }
    return $code;
}

            
getBehavior() public メソッド

定義元: yii\base\Component::getBehavior()

名前付きビヘイビアオブジェクトを返します。

public yii\base\Behavior|null getBehavior ( $name )
$name string

ビヘイビアの名前

return yii\base\Behavior|null

ビヘイビアオブジェクト。ビヘイビアが存在しない場合は null

                public function getBehavior($name)
{
    $this->ensureBehaviors();
    return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}

            
getBehaviors() public メソッド

定義元: yii\base\Component::getBehaviors()

このコンポーネントにアタッチされたすべてのビヘイビアを返します。

public yii\base\Behavior[] getBehaviors ( )
return yii\base\Behavior[]

このコンポーネントにアタッチされているビヘイビアのリスト

                public function getBehaviors()
{
    $this->ensureBehaviors();
    return $this->_behaviors;
}

            
getSessionKey() protected メソッド

認証コードを保存するために使用されるセッション変数名を返します。

protected string getSessionKey ( )
return string

セッション変数名

                protected function getSessionKey()
{
    return '__captcha/' . $this->getUniqueId();
}

            
getUniqueId() public メソッド

定義元: yii\base\Action::getUniqueId()

アプリケーション全体でのこのアクションの一意の ID を返します。

public string getUniqueId ( )
return string

アプリケーション全体でのこのアクションの一意の ID。

                public function getUniqueId()
{
    return $this->controller->getUniqueId() . '/' . $this->id;
}

            
getVerifyCode() public メソッド

認証コードを取得します。

public string getVerifyCode ( $regenerate false )
$regenerate boolean

検証コードを再生成するかどうか。

return string

認証コード。

                public function getVerifyCode($regenerate = false)
{
    if ($this->fixedVerifyCode !== null) {
        return $this->fixedVerifyCode;
    }
    $session = Yii::$app->getSession();
    $session->open();
    $name = $this->getSessionKey();
    if ($session[$name] === null || $regenerate) {
        $session[$name] = $this->generateVerifyCode();
        $session[$name . 'count'] = 1;
    }
    return $session[$name];
}

            
hasEventHandlers() public メソッド

定義元: yii\base\Component::hasEventHandlers()

名前付きイベントにアタッチされたハンドラーがあるかどうかを示す値を返します。

public boolean hasEventHandlers ( $name )
$name string

イベント名

return boolean

イベントにハンドラがアタッチされているかどうか。

                public function hasEventHandlers($name)
{
    $this->ensureBehaviors();
    if (!empty($this->_events[$name])) {
        return true;
    }
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
            return true;
        }
    }
    return Event::hasHandlers($this, $name);
}

            
hasMethod() public メソッド

定義元: yii\base\Component::hasMethod()

メソッドが定義されているかどうかを示す値を返します。

メソッドが定義されている条件:

  • クラスが指定された名前のメソッドを持っている
  • アタッチされたビヘイビアが指定された名前のメソッドを持っている ($checkBehaviors が true の場合)。
public boolean hasMethod ( $name, $checkBehaviors true )
$name string

プロパティ名

$checkBehaviors boolean

ビヘイビアのメソッドをこのコンポーネントのメソッドとして扱うかどうか

return boolean

メソッドが定義されているかどうか

                public function hasMethod($name, $checkBehaviors = true)
{
    if (method_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->hasMethod($name)) {
                return true;
            }
        }
    }
    return false;
}

            
hasProperty() public メソッド

定義元: yii\base\Component::hasProperty()

このコンポーネントにプロパティが定義されているかどうかを示す値を返します。

プロパティが定義されているのは、以下のいずれかの場合です。

  • クラスが指定された名前に関連付けられたゲッターまたはセッターメソッドを持っている場合(この場合、プロパティ名は case-insensitive です)。
  • クラスが、指定された名前のメンバ変数を持っている場合($checkVars が true の場合)。
  • アタッチされたビヘイビアが、指定された名前のプロパティを持っている場合($checkBehaviors が true の場合)。

参照

public boolean hasProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

プロパティ名

$checkVars boolean

メンバ変数をプロパティとして扱うかどうか

$checkBehaviors boolean

ビヘイビアのプロパティをこのコンポーネントのプロパティとして扱うかどうか

return boolean

プロパティが定義されているかどうか

                public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
    return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}

            
init() public メソッド

アクションを初期化します。

public void init ( )
throws yii\base\InvalidConfigException

フォントファイルが存在しない場合。

                public function init()
{
    $this->fontFile = Yii::getAlias($this->fontFile);
    if (!is_file($this->fontFile)) {
        throw new InvalidConfigException("The font file does not exist: {$this->fontFile}");
    }
}

            
off() public メソッド

定義元: yii\base\Component::off()

このコンポーネントから既存のイベントハンドラーをデタッチします。

このメソッドは on() の反対です。

注意: イベント名にワイルドカードパターンが渡された場合、このワイルドカードで登録されたハンドラのみが削除されます。一方、このワイルドカードに一致するプレーンな名前で登録されたハンドラは残ります。

参照 on()

public boolean off ( $name, $handler null )
$name string

イベント名

$handler callable|null

削除するイベントハンドラ。 null の場合、名前付きイベントにアタッチされたすべてのハンドラが削除されます。

return boolean

ハンドラが見つかり、デタッチされた場合

                public function off($name, $handler = null)
{
    $this->ensureBehaviors();
    if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
        return false;
    }
    if ($handler === null) {
        unset($this->_events[$name], $this->_eventWildcards[$name]);
        return true;
    }
    $removed = false;
    // plain event names
    if (isset($this->_events[$name])) {
        foreach ($this->_events[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_events[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_events[$name] = array_values($this->_events[$name]);
            return true;
        }
    }
    // wildcard event names
    if (isset($this->_eventWildcards[$name])) {
        foreach ($this->_eventWildcards[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_eventWildcards[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
            // remove empty wildcards to save future redundant regex checks:
            if (empty($this->_eventWildcards[$name])) {
                unset($this->_eventWildcards[$name]);
            }
        }
    }
    return $removed;
}

            
on() public メソッド

定義元: yii\base\Component::on()

イベントハンドラーをイベントにアタッチします。

イベントハンドラは有効な PHP コールバックである必要があります。以下に例を示します。

function ($event) { ... }         // anonymous function
[$object, 'handleClick']          // $object->handleClick()
['Page', 'handleClick']           // Page::handleClick()
'handleClick'                     // global function handleClick()

イベントハンドラは次のシグネチャで定義する必要があります。

function ($event)

ここで、$event はイベントに関連付けられたパラメータを含む yii\base\Event オブジェクトです。

2.0.14 以降、イベント名をワイルドカードパターンとして指定できます。

$component->on('event.group.*', function ($event) {
    Yii::trace($event->name . ' is triggered.');
});

参照 off()

public void on ( $name, $handler, $data null, $append true )
$name string

イベント名

$handler callable

イベントハンドラ

$data mixed

イベントがトリガーされたときにイベントハンドラに渡されるデータ。 イベントハンドラが呼び出されると、このデータは yii\base\Event::$data を介してアクセスできます。

$append boolean

新しいイベントハンドラを既存のハンドラリストの最後に追加するかどうか。 false の場合、新しいハンドラは既存のハンドラリストの先頭に挿入されます。

                public function on($name, $handler, $data = null, $append = true)
{
    $this->ensureBehaviors();
    if (strpos($name, '*') !== false) {
        if ($append || empty($this->_eventWildcards[$name])) {
            $this->_eventWildcards[$name][] = [$handler, $data];
        } else {
            array_unshift($this->_eventWildcards[$name], [$handler, $data]);
        }
        return;
    }
    if ($append || empty($this->_events[$name])) {
        $this->_events[$name][] = [$handler, $data];
    } else {
        array_unshift($this->_events[$name], [$handler, $data]);
    }
}

            
renderImage() protected メソッド

CAPTCHA画像を描画します。

protected string renderImage ( $code )
$code string

認証コード

return string

画像の内容

throws yii\base\InvalidConfigException

imageLibrary がサポートされていない場合

                protected function renderImage($code)
{
    if (isset($this->imageLibrary)) {
        $imageLibrary = $this->imageLibrary;
    } else {
        $imageLibrary = Captcha::checkRequirements();
    }
    if ($imageLibrary === 'gd') {
        return $this->renderImageByGD($code);
    } elseif ($imageLibrary === 'imagick') {
        return $this->renderImageByImagick($code);
    }
    throw new InvalidConfigException("Defined library '{$imageLibrary}' is not supported");
}

            
renderImageByGD() protected メソッド

GDライブラリを使用して、コードに基づいてCAPTCHA画像を描画します。

protected string renderImageByGD ( $code )
$code string

認証コード

return string

PNG 形式の画像コンテンツ。

                protected function renderImageByGD($code)
{
    $image = imagecreatetruecolor($this->width, $this->height);
    $backColor = imagecolorallocate(
        $image,
        (int) ($this->backColor % 0x1000000 / 0x10000),
        (int) ($this->backColor % 0x10000 / 0x100),
        $this->backColor % 0x100
    );
    imagefilledrectangle($image, 0, 0, $this->width - 1, $this->height - 1, $backColor);
    imagecolordeallocate($image, $backColor);
    if ($this->transparent) {
        imagecolortransparent($image, $backColor);
    }
    $foreColor = imagecolorallocate(
        $image,
        (int) ($this->foreColor % 0x1000000 / 0x10000),
        (int) ($this->foreColor % 0x10000 / 0x100),
        $this->foreColor % 0x100
    );
    $length = strlen($code);
    $box = imagettfbbox(30, 0, $this->fontFile, $code);
    $w = $box[4] - $box[0] + $this->offset * ($length - 1);
    $h = $box[1] - $box[5];
    $scale = min(($this->width - $this->padding * 2) / $w, ($this->height - $this->padding * 2) / $h);
    $x = 10;
    $y = round($this->height * 27 / 40);
    for ($i = 0; $i < $length; ++$i) {
        $fontSize = (int) (random_int(26, 32) * $scale * 0.8);
        $angle = random_int(-10, 10);
        $letter = $code[$i];
        $box = imagettftext($image, $fontSize, $angle, $x, $y, $foreColor, $this->fontFile, $letter);
        $x = $box[2] + $this->offset;
    }
    imagecolordeallocate($image, $foreColor);
    ob_start();
    imagepng($image);
    imagedestroy($image);
    return ob_get_clean();
}

            
renderImageByImagick() protected メソッド

ImageMagickライブラリを使用して、コードに基づいてCAPTCHA画像を描画します。

protected string renderImageByImagick ( $code )
$code string

認証コード

return string

PNG 形式の画像コンテンツ。

                protected function renderImageByImagick($code)
{
    $backColor = $this->transparent ? new \ImagickPixel('transparent') : new \ImagickPixel('#' . str_pad(dechex($this->backColor), 6, 0, STR_PAD_LEFT));
    $foreColor = new \ImagickPixel('#' . str_pad(dechex($this->foreColor), 6, 0, STR_PAD_LEFT));
    $image = new \Imagick();
    $image->newImage($this->width, $this->height, $backColor);
    $draw = new \ImagickDraw();
    $draw->setFont($this->fontFile);
    $draw->setFontSize(30);
    $fontMetrics = $image->queryFontMetrics($draw, $code);
    $length = strlen($code);
    $w = (int) $fontMetrics['textWidth'] - 8 + $this->offset * ($length - 1);
    $h = (int) $fontMetrics['textHeight'] - 8;
    $scale = min(($this->width - $this->padding * 2) / $w, ($this->height - $this->padding * 2) / $h);
    $x = 10;
    $y = round($this->height * 27 / 40);
    for ($i = 0; $i < $length; ++$i) {
        $draw = new \ImagickDraw();
        $draw->setFont($this->fontFile);
        $draw->setFontSize((int) (random_int(26, 32) * $scale * 0.8));
        $draw->setFillColor($foreColor);
        $image->annotateImage($draw, $x, $y, random_int(-10, 10), $code[$i]);
        $fontMetrics = $image->queryFontMetrics($draw, $code[$i]);
        $x += (int) $fontMetrics['textWidth'] + $this->offset;
    }
    $image->setImageFormat('png');
    return $image->getImageBlob();
}

            
run() public メソッド

アクションを実行します。

public void run ( )

                public function run()
{
    if (Yii::$app->request->getQueryParam(self::REFRESH_GET_VAR) !== null) {
        // AJAX request for regenerating code
        $code = $this->getVerifyCode(true);
        Yii::$app->response->format = Response::FORMAT_JSON;
        return [
            'hash1' => $this->generateValidationHash($code),
            'hash2' => $this->generateValidationHash(strtolower($code)),
            // we add a random 'v' parameter so that FireFox can refresh the image
            // when src attribute of image tag is changed
            'url' => Url::to([$this->id, 'v' => uniqid('', true)]),
        ];
    }
    $this->setHttpHeaders();
    Yii::$app->response->format = Response::FORMAT_RAW;
    return $this->renderImage($this->getVerifyCode());
}

            
runWithParams() public メソッド

定義元: yii\base\Action::runWithParams()

指定されたパラメーターを使用してこのアクションを実行します。

このメソッドは主にコントローラによって呼び出されます。

public mixed runWithParams ( $params )
$params array

アクションの run() メソッドにバインドされるパラメータ。

return mixed

アクションの結果

throws yii\base\InvalidConfigException

アクションクラスに run() メソッドがない場合

                public function runWithParams($params)
{
    if (!method_exists($this, 'run')) {
        throw new InvalidConfigException(get_class($this) . ' must define a "run()" method.');
    }
    $args = $this->controller->bindActionParams($this, $params);
    Yii::debug('Running action: ' . get_class($this) . '::run(), invoked by ' . get_class($this->controller), __METHOD__);
    if (Yii::$app->requestedParams === null) {
        Yii::$app->requestedParams = $args;
    }
    if ($this->beforeRun()) {
        $result = call_user_func_array([$this, 'run'], $args);
        $this->afterRun();
        return $result;
    }
    return null;
}

            
setHttpHeaders() protected メソッド

画像レスポンスに必要なHTTPヘッダーを設定します。

protected void setHttpHeaders ( )

                protected function setHttpHeaders()
{
    Yii::$app->getResponse()->getHeaders()
        ->set('Pragma', 'public')
        ->set('Expires', '0')
        ->set('Cache-Control', 'must-revalidate, post-check=0, pre-check=0')
        ->set('Content-Transfer-Encoding', 'binary')
        ->set('Content-type', 'image/png');
}

            
trigger() public メソッド

定義元: yii\base\Component::trigger()

イベントをトリガーします。

このメソッドはイベントの発生を表します。クラスレベルのハンドラを含む、イベントにアタッチされたすべてのハンドラを呼び出します。

public void trigger ( $name, yii\base\Event $event null )
$name string

イベント名

$event yii\base\Event|null

イベントインスタンス。設定されていない場合、デフォルトの yii\base\Event オブジェクトが作成されます。

                public function trigger($name, Event $event = null)
{
    $this->ensureBehaviors();
    $eventHandlers = [];
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (StringHelper::matchWildcard($wildcard, $name)) {
            $eventHandlers[] = $handlers;
        }
    }
    if (!empty($this->_events[$name])) {
        $eventHandlers[] = $this->_events[$name];
    }
    if (!empty($eventHandlers)) {
        $eventHandlers = call_user_func_array('array_merge', $eventHandlers);
        if ($event === null) {
            $event = new Event();
        }
        if ($event->sender === null) {
            $event->sender = $this;
        }
        $event->handled = false;
        $event->name = $name;
        foreach ($eventHandlers as $handler) {
            $event->data = $handler[1];
            call_user_func($handler[0], $event);
            // stop further handling if the event is handled
            if ($event->handled) {
                return;
            }
        }
    }
    // invoke class-level attached handlers
    Event::trigger($this, $name, $event);
}

            
validate() public メソッド

入力が生成されたコードと一致するかどうかを確認するために検証します。

public boolean validate ( $input, $caseSensitive )
$input string

ユーザ入力

$caseSensitive boolean

比較を大文字と小文字を区別して行うかどうか

return boolean

入力が有効かどうか

                public function validate($input, $caseSensitive)
{
    $code = $this->getVerifyCode();
    $valid = $caseSensitive ? ($input === $code) : strcasecmp($input, $code) === 0;
    $session = Yii::$app->getSession();
    $session->open();
    $name = $this->getSessionKey() . 'count';
    $session[$name] += 1;
    if ($valid || $session[$name] > $this->testLimit && $this->testLimit > 0) {
        $this->getVerifyCode(true);
    }
    return $valid;
}