Thrown away excess data. Camera re-stream
This commit is contained in:
@@ -9,7 +9,7 @@ class TestController extends Controller
|
|||||||
{
|
{
|
||||||
public function actionIndex()
|
public function actionIndex()
|
||||||
{
|
{
|
||||||
$client = new \app\components\ApiClient(Yii::$app->params['apiEndpoint']);
|
$client = new \app\components\ApiClient(Yii::$app->params['zmUrl'].'/zm/api');
|
||||||
print_r($client->getVersion());
|
print_r($client->getVersion());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-1
@@ -4,5 +4,9 @@ return [
|
|||||||
'adminEmail' => 'admin@example.com',
|
'adminEmail' => 'admin@example.com',
|
||||||
'senderEmail' => 'noreply@example.com',
|
'senderEmail' => 'noreply@example.com',
|
||||||
'senderName' => 'Example.com mailer',
|
'senderName' => 'Example.com mailer',
|
||||||
'apiEndpoint' => 'http://192.168.0.5:8800/zm/api',
|
'zmUrl' => 'http://192.168.0.5:8800/',
|
||||||
|
// mapping from our internal id to ZM id
|
||||||
|
'cameras' => [
|
||||||
|
'1' => 1,
|
||||||
|
]
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controllers;
|
||||||
|
|
||||||
|
use Yii;
|
||||||
|
use yii\web\Controller;
|
||||||
|
|
||||||
|
class CameraController extends Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
public function actionStream($id)
|
||||||
|
{
|
||||||
|
$cms = Yii::$app->params['cameras'];
|
||||||
|
if (!isset($cms[$id]))
|
||||||
|
{
|
||||||
|
throw new NotFoundHttpException();
|
||||||
|
}
|
||||||
|
$zm_id = $cms[$id];
|
||||||
|
$source_url = Yii::$app->params['zmUrl'].'/cgi-bin/nph-zms?scale=50&mode=jpeg&maxfps=30&buffer=1000&monitor='.$zm_id.'&connkey='.rand(0, 65536);
|
||||||
|
$fp = fopen($source_url, 'r', false);
|
||||||
|
if ($fp)
|
||||||
|
{
|
||||||
|
Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;
|
||||||
|
// send mjpeg header:
|
||||||
|
header("Cache-Control: no-cache");
|
||||||
|
header("Cache-Control: private");
|
||||||
|
header("Pragma: no-cache");
|
||||||
|
header("Content-type: multipart/x-mixed-replace; boundary=boundarydonotcross");
|
||||||
|
|
||||||
|
// pass data
|
||||||
|
fpassthru($fp);
|
||||||
|
fclose($fp);
|
||||||
|
}
|
||||||
|
else throw new NotFoundHttpException();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,40 +3,11 @@
|
|||||||
namespace app\controllers;
|
namespace app\controllers;
|
||||||
|
|
||||||
use Yii;
|
use Yii;
|
||||||
use yii\filters\AccessControl;
|
|
||||||
use yii\web\Controller;
|
use yii\web\Controller;
|
||||||
use yii\web\Response;
|
use yii\helpers\Url;
|
||||||
use yii\filters\VerbFilter;
|
|
||||||
use app\models\LoginForm;
|
|
||||||
use app\models\ContactForm;
|
|
||||||
|
|
||||||
class SiteController extends Controller
|
class SiteController extends Controller
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function behaviors()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'access' => [
|
|
||||||
'class' => AccessControl::class,
|
|
||||||
'only' => ['logout'],
|
|
||||||
'rules' => [
|
|
||||||
[
|
|
||||||
'actions' => ['logout'],
|
|
||||||
'allow' => true,
|
|
||||||
'roles' => ['@'],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'verbs' => [
|
|
||||||
'class' => VerbFilter::class,
|
|
||||||
'actions' => [
|
|
||||||
'logout' => ['post'],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
@@ -47,82 +18,19 @@ class SiteController extends Controller
|
|||||||
'error' => [
|
'error' => [
|
||||||
'class' => 'yii\web\ErrorAction',
|
'class' => 'yii\web\ErrorAction',
|
||||||
],
|
],
|
||||||
'captcha' => [
|
|
||||||
'class' => 'yii\captcha\CaptchaAction',
|
|
||||||
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
|
|
||||||
],
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Displays homepage.
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function actionIndex()
|
public function actionIndex()
|
||||||
{
|
{
|
||||||
return $this->render('index');
|
$cameras = [];
|
||||||
}
|
foreach (Yii::$app->params['cameras'] as $id => $zm_id)
|
||||||
|
|
||||||
/**
|
|
||||||
* Login action.
|
|
||||||
*
|
|
||||||
* @return Response|string
|
|
||||||
*/
|
|
||||||
public function actionLogin()
|
|
||||||
{
|
{
|
||||||
if (!Yii::$app->user->isGuest) {
|
$cameras[$id] = Url::to(['camera/stream', 'id' => $id]);
|
||||||
return $this->goHome();
|
|
||||||
}
|
}
|
||||||
|
return $this->render('index',
|
||||||
$model = new LoginForm();
|
[
|
||||||
if ($model->load(Yii::$app->request->post()) && $model->login()) {
|
'cameras' => $cameras
|
||||||
return $this->goBack();
|
|
||||||
}
|
|
||||||
|
|
||||||
$model->password = '';
|
|
||||||
return $this->render('login', [
|
|
||||||
'model' => $model,
|
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Logout action.
|
|
||||||
*
|
|
||||||
* @return Response
|
|
||||||
*/
|
|
||||||
public function actionLogout()
|
|
||||||
{
|
|
||||||
Yii::$app->user->logout();
|
|
||||||
|
|
||||||
return $this->goHome();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Displays contact page.
|
|
||||||
*
|
|
||||||
* @return Response|string
|
|
||||||
*/
|
|
||||||
public function actionContact()
|
|
||||||
{
|
|
||||||
$model = new ContactForm();
|
|
||||||
if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app->params['adminEmail'])) {
|
|
||||||
Yii::$app->session->setFlash('contactFormSubmitted');
|
|
||||||
|
|
||||||
return $this->refresh();
|
|
||||||
}
|
|
||||||
return $this->render('contact', [
|
|
||||||
'model' => $model,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Displays about page.
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function actionAbout()
|
|
||||||
{
|
|
||||||
return $this->render('about');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,65 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace app\models;
|
|
||||||
|
|
||||||
use Yii;
|
|
||||||
use yii\base\Model;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ContactForm is the model behind the contact form.
|
|
||||||
*/
|
|
||||||
class ContactForm extends Model
|
|
||||||
{
|
|
||||||
public $name;
|
|
||||||
public $email;
|
|
||||||
public $subject;
|
|
||||||
public $body;
|
|
||||||
public $verifyCode;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return array the validation rules.
|
|
||||||
*/
|
|
||||||
public function rules()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
// name, email, subject and body are required
|
|
||||||
[['name', 'email', 'subject', 'body'], 'required'],
|
|
||||||
// email has to be a valid email address
|
|
||||||
['email', 'email'],
|
|
||||||
// verifyCode needs to be entered correctly
|
|
||||||
['verifyCode', 'captcha'],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return array customized attribute labels
|
|
||||||
*/
|
|
||||||
public function attributeLabels()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'verifyCode' => 'Verification Code',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends an email to the specified email address using the information collected by this model.
|
|
||||||
* @param string $email the target email address
|
|
||||||
* @return bool whether the model passes validation
|
|
||||||
*/
|
|
||||||
public function contact($email)
|
|
||||||
{
|
|
||||||
if ($this->validate()) {
|
|
||||||
Yii::$app->mailer->compose()
|
|
||||||
->setTo($email)
|
|
||||||
->setFrom([Yii::$app->params['senderEmail'] => Yii::$app->params['senderName']])
|
|
||||||
->setReplyTo([$this->email => $this->name])
|
|
||||||
->setSubject($this->subject)
|
|
||||||
->setTextBody($this->body)
|
|
||||||
->send();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace app\models;
|
|
||||||
|
|
||||||
use Yii;
|
|
||||||
use yii\base\Model;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* LoginForm is the model behind the login form.
|
|
||||||
*
|
|
||||||
* @property-read User|null $user
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
class LoginForm extends Model
|
|
||||||
{
|
|
||||||
public $username;
|
|
||||||
public $password;
|
|
||||||
public $rememberMe = true;
|
|
||||||
|
|
||||||
private $_user = false;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return array the validation rules.
|
|
||||||
*/
|
|
||||||
public function rules()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
// username and password are both required
|
|
||||||
[['username', 'password'], 'required'],
|
|
||||||
// rememberMe must be a boolean value
|
|
||||||
['rememberMe', 'boolean'],
|
|
||||||
// password is validated by validatePassword()
|
|
||||||
['password', 'validatePassword'],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates the password.
|
|
||||||
* This method serves as the inline validation for password.
|
|
||||||
*
|
|
||||||
* @param string $attribute the attribute currently being validated
|
|
||||||
* @param array $params the additional name-value pairs given in the rule
|
|
||||||
*/
|
|
||||||
public function validatePassword($attribute, $params)
|
|
||||||
{
|
|
||||||
if (!$this->hasErrors()) {
|
|
||||||
$user = $this->getUser();
|
|
||||||
|
|
||||||
if (!$user || !$user->validatePassword($this->password)) {
|
|
||||||
$this->addError($attribute, 'Incorrect username or password.');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Logs in a user using the provided username and password.
|
|
||||||
* @return bool whether the user is logged in successfully
|
|
||||||
*/
|
|
||||||
public function login()
|
|
||||||
{
|
|
||||||
if ($this->validate()) {
|
|
||||||
return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600*24*30 : 0);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finds user by [[username]]
|
|
||||||
*
|
|
||||||
* @return User|null
|
|
||||||
*/
|
|
||||||
public function getUser()
|
|
||||||
{
|
|
||||||
if ($this->_user === false) {
|
|
||||||
$this->_user = User::findByUsername($this->username);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->_user;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+2
-14
@@ -39,19 +39,7 @@ $this->registerLinkTag(['rel' => 'icon', 'type' => 'image/x-icon', 'href' => Yii
|
|||||||
echo Nav::widget([
|
echo Nav::widget([
|
||||||
'options' => ['class' => 'navbar-nav'],
|
'options' => ['class' => 'navbar-nav'],
|
||||||
'items' => [
|
'items' => [
|
||||||
['label' => 'Home', 'url' => ['/site/index']],
|
['label' => 'Камера 1', 'url' => ['/camera/view', 'id' => 1]],
|
||||||
['label' => 'About', 'url' => ['/site/about']],
|
|
||||||
['label' => 'Contact', 'url' => ['/site/contact']],
|
|
||||||
Yii::$app->user->isGuest
|
|
||||||
? ['label' => 'Login', 'url' => ['/site/login']]
|
|
||||||
: '<li class="nav-item">'
|
|
||||||
. Html::beginForm(['/site/logout'])
|
|
||||||
. Html::submitButton(
|
|
||||||
'Logout (' . Yii::$app->user->identity->username . ')',
|
|
||||||
['class' => 'nav-link btn btn-link logout']
|
|
||||||
)
|
|
||||||
. Html::endForm()
|
|
||||||
. '</li>'
|
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
NavBar::end();
|
NavBar::end();
|
||||||
@@ -71,7 +59,7 @@ $this->registerLinkTag(['rel' => 'icon', 'type' => 'image/x-icon', 'href' => Yii
|
|||||||
<footer id="footer" class="mt-auto py-3 bg-light">
|
<footer id="footer" class="mt-auto py-3 bg-light">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row text-muted">
|
<div class="row text-muted">
|
||||||
<div class="col-md-6 text-center text-md-start">© My Company <?= date('Y') ?></div>
|
<div class="col-md-6 text-center text-md-start">© Felix' World <?= date('Y') ?></div>
|
||||||
<div class="col-md-6 text-center text-md-end"><?= Yii::powered() ?></div>
|
<div class="col-md-6 text-center text-md-end"><?= Yii::powered() ?></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/** @var yii\web\View $this */
|
|
||||||
|
|
||||||
use yii\helpers\Html;
|
|
||||||
|
|
||||||
$this->title = 'About';
|
|
||||||
$this->params['breadcrumbs'][] = $this->title;
|
|
||||||
?>
|
|
||||||
<div class="site-about">
|
|
||||||
<h1><?= Html::encode($this->title) ?></h1>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
This is the About page. You may modify the following file to customize its content:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<code><?= __FILE__ ?></code>
|
|
||||||
</div>
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/** @var yii\web\View $this */
|
|
||||||
/** @var yii\bootstrap5\ActiveForm $form */
|
|
||||||
/** @var app\models\ContactForm $model */
|
|
||||||
|
|
||||||
use yii\bootstrap5\ActiveForm;
|
|
||||||
use yii\bootstrap5\Html;
|
|
||||||
use yii\captcha\Captcha;
|
|
||||||
|
|
||||||
$this->title = 'Contact';
|
|
||||||
$this->params['breadcrumbs'][] = $this->title;
|
|
||||||
?>
|
|
||||||
<div class="site-contact">
|
|
||||||
<h1><?= Html::encode($this->title) ?></h1>
|
|
||||||
|
|
||||||
<?php if (Yii::$app->session->hasFlash('contactFormSubmitted')): ?>
|
|
||||||
|
|
||||||
<div class="alert alert-success">
|
|
||||||
Thank you for contacting us. We will respond to you as soon as possible.
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Note that if you turn on the Yii debugger, you should be able
|
|
||||||
to view the mail message on the mail panel of the debugger.
|
|
||||||
<?php if (Yii::$app->mailer->useFileTransport): ?>
|
|
||||||
Because the application is in development mode, the email is not sent but saved as
|
|
||||||
a file under <code><?= Yii::getAlias(Yii::$app->mailer->fileTransportPath) ?></code>.
|
|
||||||
Please configure the <code>useFileTransport</code> property of the <code>mail</code>
|
|
||||||
application component to be false to enable email sending.
|
|
||||||
<?php endif; ?>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<?php else: ?>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
If you have business inquiries or other questions, please fill out the following form to contact us.
|
|
||||||
Thank you.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-5">
|
|
||||||
|
|
||||||
<?php $form = ActiveForm::begin(['id' => 'contact-form']); ?>
|
|
||||||
|
|
||||||
<?= $form->field($model, 'name')->textInput(['autofocus' => true]) ?>
|
|
||||||
|
|
||||||
<?= $form->field($model, 'email') ?>
|
|
||||||
|
|
||||||
<?= $form->field($model, 'subject') ?>
|
|
||||||
|
|
||||||
<?= $form->field($model, 'body')->textarea(['rows' => 6]) ?>
|
|
||||||
|
|
||||||
<?= $form->field($model, 'verifyCode')->widget(Captcha::class, [
|
|
||||||
'template' => '<div class="row"><div class="col-lg-3">{image}</div><div class="col-lg-6">{input}</div></div>',
|
|
||||||
]) ?>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<?= Html::submitButton('Submit', ['class' => 'btn btn-primary', 'name' => 'contact-button']) ?>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<?php ActiveForm::end(); ?>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<?php endif; ?>
|
|
||||||
</div>
|
|
||||||
+4
-41
@@ -2,52 +2,15 @@
|
|||||||
|
|
||||||
/** @var yii\web\View $this */
|
/** @var yii\web\View $this */
|
||||||
|
|
||||||
$this->title = 'My Yii Application';
|
$this->title = 'Камеры';
|
||||||
?>
|
?>
|
||||||
<div class="site-index">
|
<div class="site-index">
|
||||||
|
|
||||||
<div class="jumbotron text-center bg-transparent">
|
|
||||||
<h1 class="display-4">Congratulations!</h1>
|
|
||||||
|
|
||||||
<p class="lead">You have successfully created your Yii-powered application.</p>
|
|
||||||
|
|
||||||
<p><a class="btn btn-lg btn-success" href="http://www.yiiframework.com">Get started with Yii</a></p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="body-content">
|
<div class="body-content">
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
<?php foreach ($cameras as $id => $url): ?>
|
||||||
<div class="col-lg-4">
|
<div class="col-lg-4">
|
||||||
<h2>Heading</h2>
|
<img src='<?= $url; ?>'>
|
||||||
|
|
||||||
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
|
|
||||||
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
|
|
||||||
ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
|
|
||||||
fugiat nulla pariatur.</p>
|
|
||||||
|
|
||||||
<p><a class="btn btn-outline-secondary" href="http://www.yiiframework.com/doc/">Yii Documentation »</a></p>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-4">
|
<?php endforeach; ?>
|
||||||
<h2>Heading</h2>
|
|
||||||
|
|
||||||
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
|
|
||||||
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
|
|
||||||
ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
|
|
||||||
fugiat nulla pariatur.</p>
|
|
||||||
|
|
||||||
<p><a class="btn btn-outline-secondary" href="http://www.yiiframework.com/forum/">Yii Forum »</a></p>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-4">
|
|
||||||
<h2>Heading</h2>
|
|
||||||
|
|
||||||
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
|
|
||||||
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
|
|
||||||
ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
|
|
||||||
fugiat nulla pariatur.</p>
|
|
||||||
|
|
||||||
<p><a class="btn btn-outline-secondary" href="http://www.yiiframework.com/extensions/">Yii Extensions »</a></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,49 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/** @var yii\web\View $this */
|
|
||||||
/** @var yii\bootstrap5\ActiveForm $form */
|
|
||||||
/** @var app\models\LoginForm $model */
|
|
||||||
|
|
||||||
use yii\bootstrap5\ActiveForm;
|
|
||||||
use yii\bootstrap5\Html;
|
|
||||||
|
|
||||||
$this->title = 'Login';
|
|
||||||
$this->params['breadcrumbs'][] = $this->title;
|
|
||||||
?>
|
|
||||||
<div class="site-login">
|
|
||||||
<h1><?= Html::encode($this->title) ?></h1>
|
|
||||||
|
|
||||||
<p>Please fill out the following fields to login:</p>
|
|
||||||
|
|
||||||
<?php $form = ActiveForm::begin([
|
|
||||||
'id' => 'login-form',
|
|
||||||
'layout' => 'horizontal',
|
|
||||||
'fieldConfig' => [
|
|
||||||
'template' => "{label}\n{input}\n{error}",
|
|
||||||
'labelOptions' => ['class' => 'col-lg-1 col-form-label mr-lg-3'],
|
|
||||||
'inputOptions' => ['class' => 'col-lg-3 form-control'],
|
|
||||||
'errorOptions' => ['class' => 'col-lg-7 invalid-feedback'],
|
|
||||||
],
|
|
||||||
]); ?>
|
|
||||||
|
|
||||||
<?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?>
|
|
||||||
|
|
||||||
<?= $form->field($model, 'password')->passwordInput() ?>
|
|
||||||
|
|
||||||
<?= $form->field($model, 'rememberMe')->checkbox([
|
|
||||||
'template' => "<div class=\"offset-lg-1 col-lg-3 custom-control custom-checkbox\">{input} {label}</div>\n<div class=\"col-lg-8\">{error}</div>",
|
|
||||||
]) ?>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="offset-lg-1 col-lg-11">
|
|
||||||
<?= Html::submitButton('Login', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<?php ActiveForm::end(); ?>
|
|
||||||
|
|
||||||
<div class="offset-lg-1" style="color:#999;">
|
|
||||||
You may login with <strong>admin/admin</strong> or <strong>demo/demo</strong>.<br>
|
|
||||||
To modify the username/password, please check out the code <code>app\models\User::$users</code>.
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
Reference in New Issue
Block a user