Class yii\authclient\widgets\AuthChoice
Inheritance | yii\authclient\widgets\AuthChoice » yii\base\Widget |
---|---|
Available since extension's version | 2.0 |
Source Code | https://github.com/yiisoft/yii2-authclient/blob/master/src/widgets/AuthChoice.php |
AuthChoice prints buttons for authentication via various auth clients.
It opens a popup window for the client authentication process. By default this widget relies on presence of yii\authclient\Collection among application components to get auth clients information.
Example:
<?= yii\authclient\widgets\AuthChoice::widget([
'baseAuthUrl' => ['site/auth']
]); ?>
You can customize the widget appearance by using begin() and end() syntax along with using method clientLink() or createClientUrl(). For example:
<?php
use yii\authclient\widgets\AuthChoice;
?>
<?php $authAuthChoice = AuthChoice::begin([
'baseAuthUrl' => ['site/auth']
]); ?>
<ul>
<?php foreach ($authAuthChoice->getClients() as $client): ?>
<li><?= $authAuthChoice->clientLink($client) ?></li>
<?php endforeach; ?>
</ul>
<?php AuthChoice::end(); ?>
This widget supports following keys for yii\authclient\ClientInterface::getViewOptions() result:
- popupWidth: int, width of the popup window in pixels.
- popupHeight: int, height of the popup window in pixels.
- widget: array, configuration for the widget, which should be used to render a client link; such widget should be a subclass of yii\authclient\widgets\AuthChoiceItem.
See also yii\authclient\AuthAction.
Public Properties
Property | Type | Description | Defined By |
---|---|---|---|
$autoRender | boolean | Indicates if widget content, should be rendered automatically. | yii\authclient\widgets\AuthChoice |
$baseAuthUrl | array | Base auth URL configuration. | yii\authclient\widgets\AuthChoice |
$clientCollection | string | Name of the auth client collection application component. | yii\authclient\widgets\AuthChoice |
$clientIdGetParamName | string | Name of the GET param , which should be used to passed auth client id to URL defined by $baseAuthUrl. | yii\authclient\widgets\AuthChoice |
$clientOptions | array | Additional options to be passed to the underlying JS plugin. | yii\authclient\widgets\AuthChoice |
$clients | yii\authclient\ClientInterface[] | Auth providers. | yii\authclient\widgets\AuthChoice |
$options | array | The HTML attributes that should be rendered in the div HTML tag representing the container element. | yii\authclient\widgets\AuthChoice |
$popupMode | boolean | Indicates if popup window should be used instead of direct links. | yii\authclient\widgets\AuthChoice |
Public Methods
Method | Description | Defined By |
---|---|---|
clientLink() | Outputs client auth link. | yii\authclient\widgets\AuthChoice |
createClientUrl() | Composes client auth URL. | yii\authclient\widgets\AuthChoice |
getBaseAuthUrl() | yii\authclient\widgets\AuthChoice | |
getClients() | yii\authclient\widgets\AuthChoice | |
init() | Initializes the widget. | yii\authclient\widgets\AuthChoice |
run() | Runs the widget. | yii\authclient\widgets\AuthChoice |
setBaseAuthUrl() | yii\authclient\widgets\AuthChoice | |
setClients() | yii\authclient\widgets\AuthChoice |
Protected Methods
Method | Description | Defined By |
---|---|---|
defaultBaseAuthUrl() | Composes default base auth URL configuration. | yii\authclient\widgets\AuthChoice |
defaultClients() | Returns default auth clients list. | yii\authclient\widgets\AuthChoice |
renderMainContent() | Renders the main content, which includes all external services links. | yii\authclient\widgets\AuthChoice |
Property Details
Indicates if widget content, should be rendered automatically. Note: this value automatically set to 'false' at the first call of createClientUrl()
Name of the auth client collection application component. This component will be used to fetch services value if it is not set.
Name of the GET param , which should be used to passed auth client id to URL defined by $baseAuthUrl.
Additional options to be passed to the underlying JS plugin.
The HTML attributes that should be rendered in the div HTML tag representing the container element.
See also \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered.
Indicates if popup window should be used instead of direct links.
Method Details
Outputs client auth link.
public string clientLink ( $client, $text = null, array $htmlOptions = [] ) | ||
$client | yii\authclient\ClientInterface |
External auth client instance. |
$text | string |
Link text, if not set - default value will be generated. |
$htmlOptions | array |
Link HTML options. |
return | string |
Generated HTML. |
---|---|---|
throws | \yii\base\InvalidConfigException |
on wrong configuration. |
public function clientLink($client, $text = null, array $htmlOptions = [])
{
$viewOptions = $client->getViewOptions();
if (empty($viewOptions['widget'])) {
if ($text === null) {
$text = Html::tag('span', '', ['class' => 'auth-icon ' . $client->getName()]);
}
if (!isset($htmlOptions['class'])) {
$htmlOptions['class'] = $client->getName();
}
if (!isset($htmlOptions['title'])) {
$htmlOptions['title'] = $client->getTitle();
}
Html::addCssClass($htmlOptions, ['widget' => 'auth-link']);
if ($this->popupMode) {
if (isset($viewOptions['popupWidth'])) {
$htmlOptions['data-popup-width'] = $viewOptions['popupWidth'];
}
if (isset($viewOptions['popupHeight'])) {
$htmlOptions['data-popup-height'] = $viewOptions['popupHeight'];
}
}
return Html::a($text, $this->createClientUrl($client), $htmlOptions);
}
$widgetConfig = $viewOptions['widget'];
if (!isset($widgetConfig['class'])) {
throw new InvalidConfigException('Widget config "class" parameter is missing');
}
/* @var $widgetClass Widget */
$widgetClass = $widgetConfig['class'];
if (!(is_subclass_of($widgetClass, AuthChoiceItem::className()))) {
throw new InvalidConfigException('Item widget class must be subclass of "' . AuthChoiceItem::className() . '"');
}
unset($widgetConfig['class']);
$widgetConfig['client'] = $client;
$widgetConfig['authChoice'] = $this;
return $widgetClass::widget($widgetConfig);
}
Composes client auth URL.
public string createClientUrl ( $client ) | ||
$client | yii\authclient\ClientInterface |
External auth client instance. |
return | string |
Auth URL. |
---|
public function createClientUrl($client)
{
$this->autoRender = false;
$url = $this->getBaseAuthUrl();
$url[$this->clientIdGetParamName] = $client->getId();
return Url::to($url);
}
Composes default base auth URL configuration.
protected array defaultBaseAuthUrl ( ) | ||
return | array |
Base auth URL configuration. |
---|
protected function defaultBaseAuthUrl()
{
$baseAuthUrl = [
Yii::$app->controller->getRoute()
];
$params = Yii::$app->getRequest()->getQueryParams();
unset($params[$this->clientIdGetParamName]);
$baseAuthUrl = array_merge($baseAuthUrl, $params);
return $baseAuthUrl;
}
Returns default auth clients list.
protected yii\authclient\ClientInterface[] defaultClients ( ) | ||
return | yii\authclient\ClientInterface[] |
Auth clients list. |
---|
protected function defaultClients()
{
/* @var $collection \yii\authclient\Collection */
$collection = Yii::$app->get($this->clientCollection);
return $collection->getClients();
}
public array getBaseAuthUrl ( ) | ||
return | array |
Base auth URL configuration. |
---|
public function getBaseAuthUrl()
{
if (!is_array($this->_baseAuthUrl)) {
$this->_baseAuthUrl = $this->defaultBaseAuthUrl();
}
return $this->_baseAuthUrl;
}
public yii\authclient\ClientInterface[] getClients ( ) | ||
return | yii\authclient\ClientInterface[] |
Auth providers |
---|
public function getClients()
{
if ($this->_clients === null) {
$this->_clients = $this->defaultClients();
}
return $this->_clients;
}
Initializes the widget.
public void init ( ) |
public function init()
{
$view = Yii::$app->getView();
if ($this->popupMode) {
AuthChoiceAsset::register($view);
if (empty($this->clientOptions)) {
$options = '';
} else {
$options = Json::htmlEncode($this->clientOptions);
}
$view->registerJs("jQuery('#" . $this->getId() . "').authchoice({$options});");
} else {
AuthChoiceStyleAsset::register($view);
}
$this->options['id'] = $this->getId();
echo Html::beginTag('div', $this->options);
}
Renders the main content, which includes all external services links.
protected string renderMainContent ( ) | ||
return | string |
Generated HTML. |
---|
protected function renderMainContent()
{
$items = [];
foreach ($this->getClients() as $externalService) {
$items[] = Html::tag('li', $this->clientLink($externalService));
}
return Html::tag('ul', implode('', $items), ['class' => 'auth-clients']);
}
Runs the widget.
public string run ( ) | ||
return | string |
Rendered HTML. |
---|
public function run()
{
$content = '';
if ($this->autoRender) {
$content .= $this->renderMainContent();
}
$content .= Html::endTag('div');
return $content;
}
public void setBaseAuthUrl ( array $baseAuthUrl ) | ||
$baseAuthUrl | array |
Base auth URL configuration. |
public function setBaseAuthUrl(array $baseAuthUrl)
{
$this->_baseAuthUrl = $baseAuthUrl;
}
public void setClients ( array $clients ) | ||
$clients | yii\authclient\ClientInterface[] |
Auth providers |
public function setClients(array $clients)
{
$this->_clients = $clients;
}