diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
new file mode 100644
index 000000000..011c056bb
--- /dev/null
+++ b/.git-blame-ignore-revs
@@ -0,0 +1,8 @@
+# Reformat code te be PSR-2 compatible
+93cc82c4bf42cea403e1acaab201338bea304b6e
+# Convert to short syntax (array)
+332030325fbad38a64c5e60980d3b14b6434d6dd
+# Convert to short syntax
+b0fcdfab1aecaeb620f75a83f15aa02bc25765a0
+# Fix codestyle
+0f91f32ecff52ef479addb0a5013342d59fe0697
diff --git a/.gitattributes b/.gitattributes
index 3e9092c68..705fb391d 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,6 +1,7 @@
# Ignore all test and documentation for archive
-/.github export-ignore
-/.gitattributes export-ignore
-/.scrutinizer.yml export-ignore
-/.travis.yml export-ignore
-/docs export-ignore
+/.github export-ignore
+/.git-blame-ignore-revs export-ignore
+/.gitattributes export-ignore
+/.scrutinizer.yml export-ignore
+/.travis.yml export-ignore
+/docs export-ignore
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 3d8d32c25..ea75bda5f 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -3,5 +3,5 @@ Contributing to Yii2
- [Report an issue](https://github.com/yiisoft/yii2/blob/master/docs/internals/report-an-issue.md)
- [Translate documentation or messages](https://github.com/yiisoft/yii2/blob/master/docs/internals/translation-workflow.md)
-- [Give us feedback or start a design discussion](http://www.yiiframework.com/forum/index.php/forum/42-general-discussions-for-yii-20/)
+- [Give us feedback or start a design discussion](https://www.yiiframework.com/forum/index.php/forum/42-general-discussions-for-yii-20/)
- [Contribute to the core code or fix bugs](https://github.com/yiisoft/yii2/blob/master/docs/internals/git-workflow.md)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 0671f8970..a5beac653 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -10,7 +10,7 @@ jobs:
env:
extensions: dom, json, gd, imagick
- key: cache-v1
+ key: cache-v4
runs-on: ${{ matrix.os }}
@@ -21,17 +21,16 @@ jobs:
- windows-latest
php:
- - "5.6"
- - "7.0"
- - "7.1"
- - "7.2"
- - "7.3"
- "7.4"
- "8.0"
+ - "8.1"
+ - "8.2"
+ - "8.3"
+ - "8.4"
steps:
- name: Checkout
- uses: actions/checkout@v2
+ uses: actions/checkout@v5
- name: Setup cache environment
id: cache-env
@@ -42,7 +41,7 @@ jobs:
key: ${{ env.key }}
- name: Cache extensions
- uses: actions/cache@v1
+ uses: actions/cache@v4
with:
path: ${{ steps.cache-env.outputs.dir }}
key: ${{ steps.cache-env.outputs.key }}
@@ -66,7 +65,7 @@ jobs:
echo "COMPOSER_CACHE_DIR=~\AppData\Local\Composer" >> $GITHUB_ENV
- name: Cache dependencies installed with composer
- uses: actions/cache@v1
+ uses: actions/cache@v4
with:
path: ${{ steps.cache-env.outputs.dir }}
key: php${{ matrix.php }}-composer-${{ matrix.dependencies }}-${{ hashFiles('**/composer.json') }}
diff --git a/.gitignore b/.gitignore
index 5bd9be80b..05fb29d1b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,9 @@
# phpstorm project files
.idea
+# visual studio code project files
+.vscode
+
# netbeans project files
nbproject
diff --git a/README.md b/README.md
index fd9b5f6a1..981a7f9d9 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@
-Yii 2 Basic Project Template is a skeleton [Yii 2](http://www.yiiframework.com/) application best for
+Yii 2 Basic Project Template is a skeleton [Yii 2](https://www.yiiframework.com/) application best for
rapidly creating small projects.
The template contains the basic features including user login/logout and a contact page.
@@ -37,7 +37,7 @@ DIRECTORY STRUCTURE
REQUIREMENTS
------------
-The minimum requirement by this project template that your Web server supports PHP 5.6.0.
+The minimum requirement by this project template that your Web server supports PHP 7.4.
INSTALLATION
@@ -45,8 +45,8 @@ INSTALLATION
### Install via Composer
-If you do not have [Composer](http://getcomposer.org/), you may install it by following the instructions
-at [getcomposer.org](http://getcomposer.org/doc/00-intro.md#installation-nix).
+If you do not have [Composer](https://getcomposer.org/), you may install it by following the instructions
+at [getcomposer.org](https://getcomposer.org/doc/00-intro.md#installation-nix).
You can then install this project template using the following command:
@@ -63,7 +63,7 @@ http://localhost/basic/web/
### Install from an Archive File
-Extract the archive file downloaded from [yiiframework.com](http://www.yiiframework.com/download/) to
+Extract the archive file downloaded from [yiiframework.com](https://www.yiiframework.com/download/) to
a directory named `basic` that is directly under the Web root.
Set cookie validation key in `config/web.php` file to some random secret string:
@@ -131,7 +131,7 @@ return [
TESTING
-------
-Tests are located in `tests` directory. They are developed with [Codeception PHP Testing Framework](http://codeception.com/).
+Tests are located in `tests` directory. They are developed with [Codeception PHP Testing Framework](https://codeception.com/).
By default, there are 3 test suites:
- `unit`
@@ -164,7 +164,7 @@ To execute acceptance tests do the following:
composer update
```
-4. Download [Selenium Server](http://www.seleniumhq.org/download/) and launch it:
+4. Download [Selenium Server](https://www.seleniumhq.org/download/) and launch it:
```
java -jar ~/selenium-server-standalone-x.xx.x.jar
diff --git a/assets/AppAsset.php b/assets/AppAsset.php
index 3b950fe7d..d9d4cc430 100644
--- a/assets/AppAsset.php
+++ b/assets/AppAsset.php
@@ -1,8 +1,9 @@
=5.6.0",
- "yiisoft/yii2": "~2.0.14",
- "yiisoft/yii2-bootstrap4": "~2.0.0",
- "yiisoft/yii2-swiftmailer": "~2.0.0 || ~2.1.0"
+ "php": ">=7.4.0",
+ "yiisoft/yii2": "~2.0.45",
+ "yiisoft/yii2-bootstrap5": "~2.0.2",
+ "yiisoft/yii2-symfonymailer": "~2.0.3"
},
"require-dev": {
"yiisoft/yii2-debug": "~2.1.0",
"yiisoft/yii2-gii": "~2.2.0",
"yiisoft/yii2-faker": "~2.0.0",
- "codeception/codeception": "^4.0",
- "codeception/verify": "~0.5.0 || ~1.1.0",
- "codeception/specify": "~0.4.6",
- "symfony/browser-kit": ">=2.7 <=4.2.4",
- "codeception/module-filesystem": "^1.0.0",
- "codeception/module-yii2": "^1.0.0",
- "codeception/module-asserts": "^1.0.0"
+ "codeception/codeception": "^5.0.0 || ^4.0",
+ "codeception/lib-innerbrowser": "^4.0 || ^3.0 || ^1.1",
+ "codeception/module-asserts": "^3.0 || ^1.1",
+ "codeception/module-yii2": "^1.1",
+ "codeception/module-filesystem": "^3.0 || ^2.0 || ^1.1",
+ "codeception/verify": "^3.0 || ^2.2"
},
"config": {
+ "allow-plugins": {
+ "yiisoft/yii2-composer" : true
+ },
"process-timeout": 1800,
"fxp-asset": {
"enabled": false
diff --git a/config/__autocomplete.php b/config/__autocomplete.php
index d99dea50e..e5e1c00d7 100644
--- a/config/__autocomplete.php
+++ b/config/__autocomplete.php
@@ -11,7 +11,8 @@
* }
* ```
*/
-class Yii {
+class Yii
+{
/**
* @var \yii\web\Application|\yii\console\Application|__Application
*/
@@ -19,15 +20,16 @@ class Yii {
}
/**
- * @property yii\rbac\DbManager $authManager
+ * @property yii\rbac\DbManager $authManager
* @property \yii\web\User|__WebUser $user
- *
*/
-class __Application {
+class __Application
+{
}
/**
* @property app\models\User $identity
*/
-class __WebUser {
+class __WebUser
+{
}
diff --git a/config/console.php b/config/console.php
index 299656afc..ca429affa 100644
--- a/config/console.php
+++ b/config/console.php
@@ -43,6 +43,14 @@
$config['modules']['gii'] = [
'class' => 'yii\gii\Module',
];
+ // configuration adjustments for 'dev' environment
+ // requires version `2.1.21` of yii2-debug module
+ $config['bootstrap'][] = 'debug';
+ $config['modules']['debug'] = [
+ 'class' => 'yii\debug\Module',
+ // uncomment the following to add your IP if you are not connecting from localhost.
+ //'allowedIPs' => ['127.0.0.1', '::1'],
+ ];
}
return $config;
diff --git a/config/test.php b/config/test.php
index f95bc031e..fb5e2929e 100644
--- a/config/test.php
+++ b/config/test.php
@@ -1,4 +1,5 @@
[
'db' => $db,
'mailer' => [
+ 'class' => \yii\symfonymailer\Mailer::class,
+ 'viewPath' => '@app/mail',
+ // send all mails to a file by default.
'useFileTransport' => true,
+ 'messageClass' => 'yii\symfonymailer\Message'
],
'assetManager' => [
'basePath' => __DIR__ . '/../web/assets',
diff --git a/config/test_db.php b/config/test_db.php
index f4290e0b0..f10835fe1 100644
--- a/config/test_db.php
+++ b/config/test_db.php
@@ -1,4 +1,5 @@
'site/error',
],
'mailer' => [
- 'class' => 'yii\swiftmailer\Mailer',
- // send all mails to a file by default. You have to set
- // 'useFileTransport' to false and configure transport
- // for the mailer to send real emails.
+ 'class' => \yii\symfonymailer\Mailer::class,
+ 'viewPath' => '@app/mail',
+ // send all mails to a file by default.
'useFileTransport' => true,
],
'log' => [
diff --git a/controllers/SiteController.php b/controllers/SiteController.php
index 6e8a85d10..67c3f50f8 100644
--- a/controllers/SiteController.php
+++ b/controllers/SiteController.php
@@ -19,7 +19,7 @@ public function behaviors()
{
return [
'access' => [
- 'class' => AccessControl::className(),
+ 'class' => AccessControl::class,
'only' => ['logout'],
'rules' => [
[
@@ -30,7 +30,7 @@ public function behaviors()
],
],
'verbs' => [
- 'class' => VerbFilter::className(),
+ 'class' => VerbFilter::class,
'actions' => [
'logout' => ['post'],
],
diff --git a/mail/layouts/text.php b/mail/layouts/text.php
new file mode 100644
index 000000000..0873d7728
--- /dev/null
+++ b/mail/layouts/text.php
@@ -0,0 +1,13 @@
+beginPage();
+$this->beginBody();
+echo $content;
+$this->endBody();
+$this->endPage();
diff --git a/models/LoginForm.php b/models/LoginForm.php
index dce15ccf7..5304eecf4 100644
--- a/models/LoginForm.php
+++ b/models/LoginForm.php
@@ -60,7 +60,7 @@ public function validatePassword($attribute, $params)
public function login()
{
if ($this->validate()) {
- return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600*24*30 : 0);
+ return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0);
}
return false;
}
diff --git a/requirements.php b/requirements.php
index 6cf322eb0..db69a36ee 100644
--- a/requirements.php
+++ b/requirements.php
@@ -1,4 +1,5 @@
'Memcache extension',
'mandatory' => false,
'condition' => extension_loaded('memcache') || extension_loaded('memcached'),
- 'by' => 'MemCache',
- 'memo' => extension_loaded('memcached') ? 'To use memcached set MemCache::useMemcached to true.' : ''
+ 'by' => 'MemCache',
+ 'memo' => extension_loaded('memcached') ? 'To use memcached set MemCache::useMemcached to true.' : ''
),
// CAPTCHA:
array(
'name' => 'GD PHP extension with FreeType support',
'mandatory' => false,
'condition' => $gdOK,
- 'by' => 'Captcha',
+ 'by' => 'Captcha',
'memo' => $gdMemo,
),
array(
'name' => 'ImageMagick PHP extension with PNG support',
'mandatory' => false,
'condition' => $imagickOK,
- 'by' => 'Captcha',
+ 'by' => 'Captcha',
'memo' => $imagickMemo,
),
// PHP ini :
@@ -153,7 +154,7 @@
'name' => 'APC extension',
'mandatory' => false,
'condition' => extension_loaded('apc'),
- 'by' => 'ApcCache',
+ 'by' => 'ApcCache',
);
}
diff --git a/tests/_bootstrap.php b/tests/_bootstrap.php
index 131da42af..4b8424f73 100644
--- a/tests/_bootstrap.php
+++ b/tests/_bootstrap.php
@@ -1,6 +1,7 @@
amOnPage(Url::toRoute('/site/contact'));
}
-
+
public function contactPageWorks(AcceptanceTester $I)
{
$I->wantTo('ensure that contact page works');
@@ -25,7 +25,7 @@ public function contactFormCanBeSubmitted(AcceptanceTester $I)
$I->fillField('#contactform-verifycode', 'testme');
$I->click('contact-button');
-
+
$I->wait(2); // wait for button to be clicked
$I->dontSeeElement('#contact-form');
diff --git a/tests/acceptance/HomeCest.php b/tests/acceptance/HomeCest.php
index e65df16ae..98fb6b9f7 100644
--- a/tests/acceptance/HomeCest.php
+++ b/tests/acceptance/HomeCest.php
@@ -6,13 +6,13 @@ class HomeCest
{
public function ensureThatHomePageWorks(AcceptanceTester $I)
{
- $I->amOnPage(Url::toRoute('/site/index'));
+ $I->amOnPage(Url::toRoute('/site/index'));
$I->see('My Company');
-
+
$I->seeLink('About');
$I->click('About');
$I->wait(2); // wait for page to be opened
-
+
$I->see('This is the About page.');
}
}
diff --git a/tests/bin/yii b/tests/bin/yii
index 4923537fb..39df4013d 100755
--- a/tests/bin/yii
+++ b/tests/bin/yii
@@ -3,9 +3,9 @@
/**
* Yii console bootstrap file.
*
- * @link http://www.yiiframework.com/
+ * @link https://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
- * @license http://www.yiiframework.com/license/
+ * @license https://www.yiiframework.com/license/
*/
defined('YII_DEBUG') or define('YII_DEBUG', true);
diff --git a/tests/bin/yii.bat b/tests/bin/yii.bat
index d516b3a19..ce14c92bc 100644
--- a/tests/bin/yii.bat
+++ b/tests/bin/yii.bat
@@ -4,9 +4,9 @@ rem -------------------------------------------------------------
rem Yii command line bootstrap script for Windows.
rem
rem @author Qiang Xue
-rem @link http://www.yiiframework.com/
+rem @link https://www.yiiframework.com/
rem @copyright Copyright (c) 2008 Yii Software LLC
-rem @license http://www.yiiframework.com/license/
+rem @license https://www.yiiframework.com/license/
rem -------------------------------------------------------------
@setlocal
diff --git a/tests/functional.suite.yml b/tests/functional.suite.yml
index 374c6df45..9d8cf149c 100644
--- a/tests/functional.suite.yml
+++ b/tests/functional.suite.yml
@@ -6,8 +6,9 @@
# RUN `build` COMMAND AFTER ADDING/REMOVING MODULES.
#basic/web/index.php
-class_name: FunctionalTester
+actor: FunctionalTester
modules:
enabled:
- Filesystem
- Yii2
+ - Asserts
diff --git a/tests/functional/ContactFormCest.php b/tests/functional/ContactFormCest.php
index ad8167865..f1ccaf18f 100644
--- a/tests/functional/ContactFormCest.php
+++ b/tests/functional/ContactFormCest.php
@@ -1,15 +1,15 @@
amOnPage(['site/contact']);
+ $I->amOnRoute('site/contact');
}
public function openContactPage(\FunctionalTester $I)
{
- $I->see('Contact', 'h1');
+ $I->see('Contact', 'h1');
}
public function submitEmptyForm(\FunctionalTester $I)
@@ -38,7 +38,7 @@ public function submitFormWithIncorrectEmail(\FunctionalTester $I)
$I->see('Email is not a valid email address.');
$I->dontSee('Subject cannot be blank', '.help-inline');
$I->dontSee('Body cannot be blank', '.help-inline');
- $I->dontSee('The verification code is incorrect', '.help-inline');
+ $I->dontSee('The verification code is incorrect', '.help-inline');
}
public function submitFormSuccessfully(\FunctionalTester $I)
@@ -52,6 +52,6 @@ public function submitFormSuccessfully(\FunctionalTester $I)
]);
$I->seeEmailIsSent();
$I->dontSeeElement('#contact-form');
- $I->see('Thank you for contacting us. We will respond to you as soon as possible.');
+ $I->see('Thank you for contacting us. We will respond to you as soon as possible.');
}
}
diff --git a/tests/functional/LoginFormCest.php b/tests/functional/LoginFormCest.php
index 7a83a27d6..a1545a706 100644
--- a/tests/functional/LoginFormCest.php
+++ b/tests/functional/LoginFormCest.php
@@ -10,7 +10,6 @@ public function _before(\FunctionalTester $I)
public function openLoginPage(\FunctionalTester $I)
{
$I->see('Login', 'h1');
-
}
// demonstrates `amLoggedInAs` method
@@ -54,6 +53,6 @@ public function loginSuccessfully(\FunctionalTester $I)
'LoginForm[password]' => 'admin',
]);
$I->see('Logout (admin)');
- $I->dontSeeElement('form#login-form');
+ $I->dontSeeElement('form#login-form');
}
-}
\ No newline at end of file
+}
diff --git a/tests/unit.suite.yml b/tests/unit.suite.yml
index d2e6622f8..c14e49c37 100644
--- a/tests/unit.suite.yml
+++ b/tests/unit.suite.yml
@@ -3,7 +3,7 @@
# suite for unit (internal) tests.
# RUN `build` COMMAND AFTER ADDING/REMOVING MODULES.
-class_name: UnitTester
+actor: UnitTester
modules:
enabled:
- Asserts
diff --git a/tests/unit/models/ContactFormTest.php b/tests/unit/models/ContactFormTest.php
index 93313e4a6..1bb1bb2d0 100644
--- a/tests/unit/models/ContactFormTest.php
+++ b/tests/unit/models/ContactFormTest.php
@@ -24,18 +24,18 @@ public function testEmailIsSentOnContact()
'verifyCode' => 'testme',
];
- expect_that($model->contact('admin@example.com'));
+ verify($model->contact('admin@example.com'))->notEmpty();
// using Yii2 module actions to check email was sent
$this->tester->seeEmailIsSent();
/** @var MessageInterface $emailMessage */
$emailMessage = $this->tester->grabLastSentEmail();
- expect('valid email is sent', $emailMessage)->isInstanceOf('yii\mail\MessageInterface');
- expect($emailMessage->getTo())->hasKey('admin@example.com');
- expect($emailMessage->getFrom())->hasKey('noreply@example.com');
- expect($emailMessage->getReplyTo())->hasKey('tester@example.com');
- expect($emailMessage->getSubject())->equals('very important letter subject');
- expect($emailMessage->toString())->stringContainsString('body of current message');
+ verify($emailMessage)->instanceOf('yii\mail\MessageInterface');
+ verify($emailMessage->getTo())->arrayHasKey('admin@example.com');
+ verify($emailMessage->getFrom())->arrayHasKey('noreply@example.com');
+ verify($emailMessage->getReplyTo())->arrayHasKey('tester@example.com');
+ verify($emailMessage->getSubject())->equals('very important letter subject');
+ verify($emailMessage->toString())->stringContainsString('body of current message');
}
}
diff --git a/tests/unit/models/LoginFormTest.php b/tests/unit/models/LoginFormTest.php
index ecdb14512..6f96c2377 100644
--- a/tests/unit/models/LoginFormTest.php
+++ b/tests/unit/models/LoginFormTest.php
@@ -20,8 +20,8 @@ public function testLoginNoUser()
'password' => 'not_existing_password',
]);
- expect_not($this->model->login());
- expect_that(\Yii::$app->user->isGuest);
+ verify($this->model->login())->false();
+ verify(\Yii::$app->user->isGuest)->true();
}
public function testLoginWrongPassword()
@@ -31,9 +31,9 @@ public function testLoginWrongPassword()
'password' => 'wrong_password',
]);
- expect_not($this->model->login());
- expect_that(\Yii::$app->user->isGuest);
- expect($this->model->errors)->hasKey('password');
+ verify($this->model->login())->false();
+ verify(\Yii::$app->user->isGuest)->true();
+ verify($this->model->errors)->arrayHasKey('password');
}
public function testLoginCorrect()
@@ -43,9 +43,8 @@ public function testLoginCorrect()
'password' => 'demo',
]);
- expect_that($this->model->login());
- expect_not(\Yii::$app->user->isGuest);
- expect($this->model->errors)->hasntKey('password');
+ verify($this->model->login())->true();
+ verify(\Yii::$app->user->isGuest)->false();
+ verify($this->model->errors)->arrayHasNotKey('password');
}
-
}
diff --git a/tests/unit/models/UserTest.php b/tests/unit/models/UserTest.php
index cb612785f..3db9772a3 100644
--- a/tests/unit/models/UserTest.php
+++ b/tests/unit/models/UserTest.php
@@ -8,37 +8,36 @@ class UserTest extends \Codeception\Test\Unit
{
public function testFindUserById()
{
- expect_that($user = User::findIdentity(100));
- expect($user->username)->equals('admin');
+ verify($user = User::findIdentity(100))->notEmpty();
+ verify($user->username)->equals('admin');
- expect_not(User::findIdentity(999));
+ verify(User::findIdentity(999))->empty();
}
public function testFindUserByAccessToken()
{
- expect_that($user = User::findIdentityByAccessToken('100-token'));
- expect($user->username)->equals('admin');
+ verify($user = User::findIdentityByAccessToken('100-token'))->notEmpty();
+ verify($user->username)->equals('admin');
- expect_not(User::findIdentityByAccessToken('non-existing'));
+ verify(User::findIdentityByAccessToken('non-existing'))->empty();
}
public function testFindUserByUsername()
{
- expect_that($user = User::findByUsername('admin'));
- expect_not(User::findByUsername('not-admin'));
+ verify($user = User::findByUsername('admin'))->notEmpty();
+ verify(User::findByUsername('not-admin'))->empty();
}
/**
* @depends testFindUserByUsername
*/
- public function testValidateUser($user)
+ public function testValidateUser()
{
$user = User::findByUsername('admin');
- expect_that($user->validateAuthKey('test100key'));
- expect_not($user->validateAuthKey('test102key'));
+ verify($user->validateAuthKey('test100key'))->notEmpty();
+ verify($user->validateAuthKey('test102key'))->empty();
- expect_that($user->validatePassword('admin'));
- expect_not($user->validatePassword('123456'));
+ verify($user->validatePassword('admin'))->notEmpty();
+ verify($user->validatePassword('123456'))->empty();
}
-
}
diff --git a/tests/unit/widgets/AlertTest.php b/tests/unit/widgets/AlertTest.php
index 5a84cbdb5..af2db5d21 100644
--- a/tests/unit/widgets/AlertTest.php
+++ b/tests/unit/widgets/AlertTest.php
@@ -15,12 +15,12 @@ public function testSingleErrorMessage()
$renderingResult = Alert::widget();
- expect($renderingResult)->stringContainsString($message);
- expect($renderingResult)->stringContainsString('alert-danger');
+ verify($renderingResult)->stringContainsString($message);
+ verify($renderingResult)->stringContainsString('alert-danger');
- expect($renderingResult)->stringNotContainsString('alert-success');
- expect($renderingResult)->stringNotContainsString('alert-info');
- expect($renderingResult)->stringNotContainsString('alert-warning');
+ verify($renderingResult)->stringNotContainsString('alert-success');
+ verify($renderingResult)->stringNotContainsString('alert-info');
+ verify($renderingResult)->stringNotContainsString('alert-warning');
}
public function testMultipleErrorMessages()
@@ -32,13 +32,13 @@ public function testMultipleErrorMessages()
$renderingResult = Alert::widget();
- expect($renderingResult)->stringContainsString($firstMessage);
- expect($renderingResult)->stringContainsString($secondMessage);
- expect($renderingResult)->stringContainsString('alert-danger');
+ verify($renderingResult)->stringContainsString($firstMessage);
+ verify($renderingResult)->stringContainsString($secondMessage);
+ verify($renderingResult)->stringContainsString('alert-danger');
- expect($renderingResult)->stringNotContainsString('alert-success');
- expect($renderingResult)->stringNotContainsString('alert-info');
- expect($renderingResult)->stringNotContainsString('alert-warning');
+ verify($renderingResult)->stringNotContainsString('alert-success');
+ verify($renderingResult)->stringNotContainsString('alert-info');
+ verify($renderingResult)->stringNotContainsString('alert-warning');
}
public function testSingleDangerMessage()
@@ -49,12 +49,12 @@ public function testSingleDangerMessage()
$renderingResult = Alert::widget();
- expect($renderingResult)->stringContainsString($message);
- expect($renderingResult)->stringContainsString('alert-danger');
+ verify($renderingResult)->stringContainsString($message);
+ verify($renderingResult)->stringContainsString('alert-danger');
- expect($renderingResult)->stringNotContainsString('alert-success');
- expect($renderingResult)->stringNotContainsString('alert-info');
- expect($renderingResult)->stringNotContainsString('alert-warning');
+ verify($renderingResult)->stringNotContainsString('alert-success');
+ verify($renderingResult)->stringNotContainsString('alert-info');
+ verify($renderingResult)->stringNotContainsString('alert-warning');
}
public function testMultipleDangerMessages()
@@ -66,13 +66,13 @@ public function testMultipleDangerMessages()
$renderingResult = Alert::widget();
- expect($renderingResult)->stringContainsString($firstMessage);
- expect($renderingResult)->stringContainsString($secondMessage);
- expect($renderingResult)->stringContainsString('alert-danger');
+ verify($renderingResult)->stringContainsString($firstMessage);
+ verify($renderingResult)->stringContainsString($secondMessage);
+ verify($renderingResult)->stringContainsString('alert-danger');
- expect($renderingResult)->stringNotContainsString('alert-success');
- expect($renderingResult)->stringNotContainsString('alert-info');
- expect($renderingResult)->stringNotContainsString('alert-warning');
+ verify($renderingResult)->stringNotContainsString('alert-success');
+ verify($renderingResult)->stringNotContainsString('alert-info');
+ verify($renderingResult)->stringNotContainsString('alert-warning');
}
public function testSingleSuccessMessage()
@@ -83,12 +83,12 @@ public function testSingleSuccessMessage()
$renderingResult = Alert::widget();
- expect($renderingResult)->stringContainsString($message);
- expect($renderingResult)->stringContainsString('alert-success');
+ verify($renderingResult)->stringContainsString($message);
+ verify($renderingResult)->stringContainsString('alert-success');
- expect($renderingResult)->stringNotContainsString('alert-danger');
- expect($renderingResult)->stringNotContainsString('alert-info');
- expect($renderingResult)->stringNotContainsString('alert-warning');
+ verify($renderingResult)->stringNotContainsString('alert-danger');
+ verify($renderingResult)->stringNotContainsString('alert-info');
+ verify($renderingResult)->stringNotContainsString('alert-warning');
}
public function testMultipleSuccessMessages()
@@ -100,13 +100,13 @@ public function testMultipleSuccessMessages()
$renderingResult = Alert::widget();
- expect($renderingResult)->stringContainsString($firstMessage);
- expect($renderingResult)->stringContainsString($secondMessage);
- expect($renderingResult)->stringContainsString('alert-success');
+ verify($renderingResult)->stringContainsString($firstMessage);
+ verify($renderingResult)->stringContainsString($secondMessage);
+ verify($renderingResult)->stringContainsString('alert-success');
- expect($renderingResult)->stringNotContainsString('alert-danger');
- expect($renderingResult)->stringNotContainsString('alert-info');
- expect($renderingResult)->stringNotContainsString('alert-warning');
+ verify($renderingResult)->stringNotContainsString('alert-danger');
+ verify($renderingResult)->stringNotContainsString('alert-info');
+ verify($renderingResult)->stringNotContainsString('alert-warning');
}
public function testSingleInfoMessage()
@@ -117,12 +117,12 @@ public function testSingleInfoMessage()
$renderingResult = Alert::widget();
- expect($renderingResult)->stringContainsString($message);
- expect($renderingResult)->stringContainsString('alert-info');
+ verify($renderingResult)->stringContainsString($message);
+ verify($renderingResult)->stringContainsString('alert-info');
- expect($renderingResult)->stringNotContainsString('alert-danger');
- expect($renderingResult)->stringNotContainsString('alert-success');
- expect($renderingResult)->stringNotContainsString('alert-warning');
+ verify($renderingResult)->stringNotContainsString('alert-danger');
+ verify($renderingResult)->stringNotContainsString('alert-success');
+ verify($renderingResult)->stringNotContainsString('alert-warning');
}
public function testMultipleInfoMessages()
@@ -134,13 +134,13 @@ public function testMultipleInfoMessages()
$renderingResult = Alert::widget();
- expect($renderingResult)->stringContainsString($firstMessage);
- expect($renderingResult)->stringContainsString($secondMessage);
- expect($renderingResult)->stringContainsString('alert-info');
+ verify($renderingResult)->stringContainsString($firstMessage);
+ verify($renderingResult)->stringContainsString($secondMessage);
+ verify($renderingResult)->stringContainsString('alert-info');
- expect($renderingResult)->stringNotContainsString('alert-danger');
- expect($renderingResult)->stringNotContainsString('alert-success');
- expect($renderingResult)->stringNotContainsString('alert-warning');
+ verify($renderingResult)->stringNotContainsString('alert-danger');
+ verify($renderingResult)->stringNotContainsString('alert-success');
+ verify($renderingResult)->stringNotContainsString('alert-warning');
}
public function testSingleWarningMessage()
@@ -151,12 +151,12 @@ public function testSingleWarningMessage()
$renderingResult = Alert::widget();
- expect($renderingResult)->stringContainsString($message);
- expect($renderingResult)->stringContainsString('alert-warning');
+ verify($renderingResult)->stringContainsString($message);
+ verify($renderingResult)->stringContainsString('alert-warning');
- expect($renderingResult)->stringNotContainsString('alert-danger');
- expect($renderingResult)->stringNotContainsString('alert-success');
- expect($renderingResult)->stringNotContainsString('alert-info');
+ verify($renderingResult)->stringNotContainsString('alert-danger');
+ verify($renderingResult)->stringNotContainsString('alert-success');
+ verify($renderingResult)->stringNotContainsString('alert-info');
}
public function testMultipleWarningMessages()
@@ -168,16 +168,17 @@ public function testMultipleWarningMessages()
$renderingResult = Alert::widget();
- expect($renderingResult)->stringContainsString($firstMessage);
- expect($renderingResult)->stringContainsString($secondMessage);
- expect($renderingResult)->stringContainsString('alert-warning');
+ verify($renderingResult)->stringContainsString($firstMessage);
+ verify($renderingResult)->stringContainsString($secondMessage);
+ verify($renderingResult)->stringContainsString('alert-warning');
- expect($renderingResult)->stringNotContainsString('alert-danger');
- expect($renderingResult)->stringNotContainsString('alert-success');
- expect($renderingResult)->stringNotContainsString('alert-info');
+ verify($renderingResult)->stringNotContainsString('alert-danger');
+ verify($renderingResult)->stringNotContainsString('alert-success');
+ verify($renderingResult)->stringNotContainsString('alert-info');
}
- public function testSingleMixedMessages() {
+ public function testSingleMixedMessages()
+ {
$errorMessage = 'This is an error message';
$dangerMessage = 'This is a danger message';
$successMessage = 'This is a success message';
@@ -192,19 +193,20 @@ public function testSingleMixedMessages() {
$renderingResult = Alert::widget();
- expect($renderingResult)->stringContainsString($errorMessage);
- expect($renderingResult)->stringContainsString($dangerMessage);
- expect($renderingResult)->stringContainsString($successMessage);
- expect($renderingResult)->stringContainsString($infoMessage);
- expect($renderingResult)->stringContainsString($warningMessage);
+ verify($renderingResult)->stringContainsString($errorMessage);
+ verify($renderingResult)->stringContainsString($dangerMessage);
+ verify($renderingResult)->stringContainsString($successMessage);
+ verify($renderingResult)->stringContainsString($infoMessage);
+ verify($renderingResult)->stringContainsString($warningMessage);
- expect($renderingResult)->stringContainsString('alert-danger');
- expect($renderingResult)->stringContainsString('alert-success');
- expect($renderingResult)->stringContainsString('alert-info');
- expect($renderingResult)->stringContainsString('alert-warning');
+ verify($renderingResult)->stringContainsString('alert-danger');
+ verify($renderingResult)->stringContainsString('alert-success');
+ verify($renderingResult)->stringContainsString('alert-info');
+ verify($renderingResult)->stringContainsString('alert-warning');
}
- public function testMultipleMixedMessages() {
+ public function testMultipleMixedMessages()
+ {
$firstErrorMessage = 'This is the first error message';
$secondErrorMessage = 'This is the second error message';
$firstDangerMessage = 'This is the first danger message';
@@ -224,21 +226,21 @@ public function testMultipleMixedMessages() {
$renderingResult = Alert::widget();
- expect($renderingResult)->stringContainsString($firstErrorMessage);
- expect($renderingResult)->stringContainsString($secondErrorMessage);
- expect($renderingResult)->stringContainsString($firstDangerMessage);
- expect($renderingResult)->stringContainsString($secondDangerMessage);
- expect($renderingResult)->stringContainsString($firstSuccessMessage);
- expect($renderingResult)->stringContainsString($secondSuccessMessage);
- expect($renderingResult)->stringContainsString($firstInfoMessage);
- expect($renderingResult)->stringContainsString($secondInfoMessage);
- expect($renderingResult)->stringContainsString($firstWarningMessage);
- expect($renderingResult)->stringContainsString($secondWarningMessage);
-
- expect($renderingResult)->stringContainsString('alert-danger');
- expect($renderingResult)->stringContainsString('alert-success');
- expect($renderingResult)->stringContainsString('alert-info');
- expect($renderingResult)->stringContainsString('alert-warning');
+ verify($renderingResult)->stringContainsString($firstErrorMessage);
+ verify($renderingResult)->stringContainsString($secondErrorMessage);
+ verify($renderingResult)->stringContainsString($firstDangerMessage);
+ verify($renderingResult)->stringContainsString($secondDangerMessage);
+ verify($renderingResult)->stringContainsString($firstSuccessMessage);
+ verify($renderingResult)->stringContainsString($secondSuccessMessage);
+ verify($renderingResult)->stringContainsString($firstInfoMessage);
+ verify($renderingResult)->stringContainsString($secondInfoMessage);
+ verify($renderingResult)->stringContainsString($firstWarningMessage);
+ verify($renderingResult)->stringContainsString($secondWarningMessage);
+
+ verify($renderingResult)->stringContainsString('alert-danger');
+ verify($renderingResult)->stringContainsString('alert-success');
+ verify($renderingResult)->stringContainsString('alert-info');
+ verify($renderingResult)->stringContainsString('alert-warning');
}
public function testFlashIntegrity()
@@ -255,7 +257,7 @@ public function testFlashIntegrity()
Yii::$app->session->close();
Yii::$app->session->open();
- expect(Yii::$app->session->getFlash('error'))->null();
- expect(Yii::$app->session->getFlash('unrelated'))->equals($unrelatedMessage);
+ verify(Yii::$app->session->getFlash('error'))->empty();
+ verify(Yii::$app->session->getFlash('unrelated'))->equals($unrelatedMessage);
}
}
diff --git a/views/layouts/main.php b/views/layouts/main.php
index 67328ca86..c204435c0 100644
--- a/views/layouts/main.php
+++ b/views/layouts/main.php
@@ -5,34 +5,36 @@
use app\assets\AppAsset;
use app\widgets\Alert;
-use yii\bootstrap4\Breadcrumbs;
-use yii\bootstrap4\Html;
-use yii\bootstrap4\Nav;
-use yii\bootstrap4\NavBar;
+use yii\bootstrap5\Breadcrumbs;
+use yii\bootstrap5\Html;
+use yii\bootstrap5\Nav;
+use yii\bootstrap5\NavBar;
AppAsset::register($this);
+
+$this->registerCsrfMetaTags();
+$this->registerMetaTag(['charset' => Yii::$app->charset], 'charset');
+$this->registerMetaTag(['name' => 'viewport', 'content' => 'width=device-width, initial-scale=1, shrink-to-fit=no']);
+$this->registerMetaTag(['name' => 'description', 'content' => $this->params['meta_description'] ?? '']);
+$this->registerMetaTag(['name' => 'keywords', 'content' => $this->params['meta_keywords'] ?? '']);
+$this->registerLinkTag(['rel' => 'icon', 'type' => 'image/x-icon', 'href' => Yii::getAlias('@web/favicon.ico')]);
?>
beginPage() ?>
-
-
- registerCsrfMetaTags() ?>
= Html::encode($this->title) ?>
head() ?>
beginBody() ?>
-
+
-
+
- = Breadcrumbs::widget([
- 'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
- ]) ?>
+ params['breadcrumbs'])): ?>
+ = Breadcrumbs::widget(['links' => $this->params['breadcrumbs']]) ?>
+
= Alert::widget() ?>
= $content ?>
-