Session
カスタム認証オブジェクトでコンポーネント (カスタムまたはベースのようなもの) を使用する方法は? (にあるController/Components/Auth
)??
試しpublic $components = array('Session', 'name of my custom component');
ましたが、うまくいきません。
ありがとう...
Session
カスタム認証オブジェクトでコンポーネント (カスタムまたはベースのようなもの) を使用する方法は? (にあるController/Components/Auth
)??
試しpublic $components = array('Session', 'name of my custom component');
ましたが、うまくいきません。
ありがとう...
私は自分でこれを行う方法を探していたので、この質問が尋ねられているのを見つけたので、調査結果を共有します.
BaseAuthenticate::__construct() を調べたところ、AuthComponent がコントローラーの ComponentCollection を各認証オブジェクトに送信しているようです。やってみた
$this->Session = $this->_Collection->__get('Session');
$this->Session->write('foo', 'bar');
それは機能しましたが、それは AppController に SessionComponent を既にロードしているからです。ComponentCollection::__get() はロードされたコンポーネントのみを返しました。コンポーネントの操作方法の詳細については、ComponentCollection クラスとその親である ObjectCollection を参照してください。
これは、認証クラスで行ったことです。
/**
* Constructor
*
* @param ComponentCollection $collection The Component collection used on this request.
* @param array $settings Array of settings to use.
*/
public function __construct(ComponentCollection $collection, $settings) {
$settings = array_merge($this->settings, $settings);
parent::__construct($collection, $settings);
$this->http = new HttpSocket();
$this->_initComponentCollection();
}
/**
* Initializes all the loaded Components for the Authentication Object.
* Attaches a reference of each component to the Authentication Object.
*
* @return void
*/
protected function _initComponentCollection() {
$components = $this->_Collection->loaded();
if (!empty($components)) {
foreach ($components as $name) {
$this->{$name} = $this->_Collection->__get($name);
}
}
}
すべてのコンポーネントをロードしたくないので、これはロードされたコンポーネントのみを使用します。同様のスニペットを BaseAuthenticate クラスに追加することが実行可能かどうかを確認するために、cakephp でチケットを開きます。
CakeBookによると:
// Pass settings in $components array
public $components = array(
'Auth' => array(
'authenticate' => array(
'name of custom authentication object'
)
)
);
Auth コンポーネントの authenticate プロパティは、フォーム、ベーシック、ダイジェスト、カスタムのいずれであっても、使用する認証オブジェクトを指定する場所です。