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()
Base auth URL configuration. This property is read-only.
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.
Auth providers. This property is read-only.
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;
}