diff --git a/.gitattributes b/.gitattributes
index 89f0af5..3d0ae75 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,8 +1,35 @@
-# Ignore all test and documentation for archive
-/.github export-ignore
-/.gitattributes export-ignore
-/.scrutinizer.yml export-ignore
-/.travis.yml export-ignore
-/docs export-ignore
-/composer.lock
-*.css linguist-language=PHP
\ No newline at end of file
+# Autodetect text files
+* text=auto eol=lf
+
+# ...Unless the name matches the following overriding patterns
+
+# Definitively text files
+*.php text
+*.css text
+*.js text
+*.txt text
+*.md text
+*.xml text
+*.json text
+*.bat text
+*.sql text
+*.yml text
+
+# Ensure those won't be messed up with
+*.png binary
+*.jpg binary
+*.gif binary
+*.ttf binary
+
+# Avoid merge conflicts in CHANGELOG
+# https://about.gitlab.com/2015/02/10/gitlab-reduced-merge-conflicts-by-90-percent-with-changelog-placeholders/
+/CHANGELOG.md merge=union
+
+# Exclude files from the archive
+/.gitattributes export-ignore
+/.github export-ignore
+/.gitignore export-ignore
+/.styleci.yml export-ignore
+/docs export-ignore
+/psalm.xml export-ignore
+/tests export-ignore
diff --git a/README.md b/README.md
index 99f0c11..fa30670 100644
--- a/README.md
+++ b/README.md
@@ -25,7 +25,11 @@
A modern, Bootstrap 5-powered Yii2 application template designed for rapid web-application development. Built with best practices, clean architecture, and developer-friendly configuration, it lets you create production-ready apps with minimal setup while maintaining code quality and extensibility.
-
+
+
+
+
+
## Features
@@ -81,7 +85,7 @@ cd myapp
```bash
# Using built-in PHP server
-php -S localhost:8080 -t public
+php -S localhost:8080 -t web
# Or using Yii console command
./yii serve
@@ -149,13 +153,11 @@ root/
│ │ ├── event/ Event handlers
│ │ └── resource/ CSS, JS, layouts, messages
│ └── usecase/ Application use cases
-│ ├── contact/ Contact functionality
│ ├── hello/ Console command example
-│ ├── security/ Security features
│ └── site/ Site pages
├── tests/ Test suites
├── vendor/ Composer dependencies
-└── public/ Web server document root
+└── web/ Web server document root
```
#### Creating your first page
@@ -176,11 +178,6 @@ class SiteController extends Controller
{
return $this->render('index');
}
-
- public function actionAbout(): string
- {
- return $this->render('about');
- }
}
```
@@ -216,10 +213,8 @@ For detailed configuration options and advanced usage:
The web application includes these ready-to-use pages:
-- **[Home Page](docs/home.png)** - Welcome page with navigation
-- **[About Page](docs/about.png)** - Information about your application
-- **[Contact Page](docs/contact.png)** - Contact form with validation
-- **[404 Error Page](docs/404.png)** - Custom error handling
+- **[404 Error Page](docs/images/404.png)** - Custom error handling
+- **[404 Error Page Dark](docs/images/404-dark.png)** - Custom error handling
## Our social networks
diff --git a/composer.json b/composer.json
index a67d13f..c96046c 100644
--- a/composer.json
+++ b/composer.json
@@ -12,11 +12,8 @@
"require": {
"php": ">=8.1",
"php-forge/foxy": "^0.1",
- "ui-awesome/html": "^0.3",
- "ui-awesome/html-component-bootstrap5": "^1.0@dev",
"ui-awesome/html-svg":"^0.2",
"vlucas/phpdotenv": "^5.6",
- "yii2-extensions/localeurls": "^0.1.0",
"yiisoft/yii2": "^2.0.53|^22",
"yiisoft/yii2-bootstrap5": "^2.0.50|^22",
"yiisoft/yii2-symfonymailer": "^4.0|^22"
diff --git a/composer.lock b/composer.lock
index f885f5d..4395466 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "a00d0ea1f531a8651ce8f8e80bbe8df3",
+ "content-hash": "79369565fba8387bdaacddb16fe6a3d3",
"packages": [
{
"name": "cebe/markdown",
@@ -72,16 +72,16 @@
},
{
"name": "composer/ca-bundle",
- "version": "1.5.7",
+ "version": "1.5.8",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
- "reference": "d665d22c417056996c59019579f1967dfe5c1e82"
+ "reference": "719026bb30813accb68271fee7e39552a58e9f65"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d665d22c417056996c59019579f1967dfe5c1e82",
- "reference": "d665d22c417056996c59019579f1967dfe5c1e82",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/719026bb30813accb68271fee7e39552a58e9f65",
+ "reference": "719026bb30813accb68271fee7e39552a58e9f65",
"shasum": ""
},
"require": {
@@ -128,7 +128,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/ca-bundle/issues",
- "source": "https://github.com/composer/ca-bundle/tree/1.5.7"
+ "source": "https://github.com/composer/ca-bundle/tree/1.5.8"
},
"funding": [
{
@@ -138,26 +138,22 @@
{
"url": "https://github.com/composer",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
}
],
- "time": "2025-05-26T15:08:54+00:00"
+ "time": "2025-08-20T18:49:47+00:00"
},
{
"name": "composer/class-map-generator",
- "version": "1.6.1",
+ "version": "1.6.2",
"source": {
"type": "git",
"url": "https://github.com/composer/class-map-generator.git",
- "reference": "134b705ddb0025d397d8318a75825fe3c9d1da34"
+ "reference": "ba9f089655d4cdd64e762a6044f411ccdaec0076"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/class-map-generator/zipball/134b705ddb0025d397d8318a75825fe3c9d1da34",
- "reference": "134b705ddb0025d397d8318a75825fe3c9d1da34",
+ "url": "https://api.github.com/repos/composer/class-map-generator/zipball/ba9f089655d4cdd64e762a6044f411ccdaec0076",
+ "reference": "ba9f089655d4cdd64e762a6044f411ccdaec0076",
"shasum": ""
},
"require": {
@@ -201,7 +197,7 @@
],
"support": {
"issues": "https://github.com/composer/class-map-generator/issues",
- "source": "https://github.com/composer/class-map-generator/tree/1.6.1"
+ "source": "https://github.com/composer/class-map-generator/tree/1.6.2"
},
"funding": [
{
@@ -211,26 +207,22 @@
{
"url": "https://github.com/composer",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
}
],
- "time": "2025-03-24T13:50:44+00:00"
+ "time": "2025-08-20T18:52:43+00:00"
},
{
"name": "composer/composer",
- "version": "2.8.10",
+ "version": "2.8.11",
"source": {
"type": "git",
"url": "https://github.com/composer/composer.git",
- "reference": "53834f587d7ab2527eb237459d7b94d1fb9d4c5a"
+ "reference": "00e1a3396eea67033775c4a49c772376f45acd73"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/composer/zipball/53834f587d7ab2527eb237459d7b94d1fb9d4c5a",
- "reference": "53834f587d7ab2527eb237459d7b94d1fb9d4c5a",
+ "url": "https://api.github.com/repos/composer/composer/zipball/00e1a3396eea67033775c4a49c772376f45acd73",
+ "reference": "00e1a3396eea67033775c4a49c772376f45acd73",
"shasum": ""
},
"require": {
@@ -244,7 +236,7 @@
"justinrainbow/json-schema": "^6.3.1",
"php": "^7.2.5 || ^8.0",
"psr/log": "^1.0 || ^2.0 || ^3.0",
- "react/promise": "^2.11 || ^3.2",
+ "react/promise": "^2.11 || ^3.3",
"seld/jsonlint": "^1.4",
"seld/phar-utils": "^1.2",
"seld/signal-handler": "^2.0",
@@ -315,7 +307,7 @@
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/composer/issues",
"security": "https://github.com/composer/composer/security/policy",
- "source": "https://github.com/composer/composer/tree/2.8.10"
+ "source": "https://github.com/composer/composer/tree/2.8.11"
},
"funding": [
{
@@ -325,13 +317,9 @@
{
"url": "https://github.com/composer",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
}
],
- "time": "2025-07-10T17:08:33+00:00"
+ "time": "2025-08-21T09:29:39+00:00"
},
{
"name": "composer/metadata-minifier",
@@ -483,16 +471,16 @@
},
{
"name": "composer/semver",
- "version": "3.4.3",
+ "version": "3.4.4",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
- "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12"
+ "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
- "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
+ "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95",
+ "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95",
"shasum": ""
},
"require": {
@@ -544,7 +532,7 @@
"support": {
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/semver/issues",
- "source": "https://github.com/composer/semver/tree/3.4.3"
+ "source": "https://github.com/composer/semver/tree/3.4.4"
},
"funding": [
{
@@ -554,13 +542,9 @@
{
"url": "https://github.com/composer",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
}
],
- "time": "2024-09-19T14:15:21+00:00"
+ "time": "2025-08-20T19:15:30+00:00"
},
{
"name": "composer/spdx-licenses",
@@ -1022,16 +1006,16 @@
},
{
"name": "justinrainbow/json-schema",
- "version": "6.4.2",
+ "version": "6.5.1",
"source": {
"type": "git",
"url": "https://github.com/jsonrainbow/json-schema.git",
- "reference": "ce1fd2d47799bb60668643bc6220f6278a4c1d02"
+ "reference": "b5ab21e431594897e5bb86343c01f140ba862c26"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/ce1fd2d47799bb60668643bc6220f6278a4c1d02",
- "reference": "ce1fd2d47799bb60668643bc6220f6278a4c1d02",
+ "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/b5ab21e431594897e5bb86343c01f140ba862c26",
+ "reference": "b5ab21e431594897e5bb86343c01f140ba862c26",
"shasum": ""
},
"require": {
@@ -1041,7 +1025,7 @@
},
"require-dev": {
"friendsofphp/php-cs-fixer": "3.3.0",
- "json-schema/json-schema-test-suite": "1.2.0",
+ "json-schema/json-schema-test-suite": "^23.2",
"marc-mabe/php-enum-phpstan": "^2.0",
"phpspec/prophecy": "^1.19",
"phpstan/phpstan": "^1.12",
@@ -1091,9 +1075,9 @@
],
"support": {
"issues": "https://github.com/jsonrainbow/json-schema/issues",
- "source": "https://github.com/jsonrainbow/json-schema/tree/6.4.2"
+ "source": "https://github.com/jsonrainbow/json-schema/tree/6.5.1"
},
- "time": "2025-06-03T18:27:04+00:00"
+ "time": "2025-08-29T10:58:11+00:00"
},
{
"name": "marc-mabe/php-enum",
@@ -1292,16 +1276,16 @@
},
{
"name": "phpoption/phpoption",
- "version": "1.9.3",
+ "version": "1.9.4",
"source": {
"type": "git",
"url": "https://github.com/schmittjoh/php-option.git",
- "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54"
+ "reference": "638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54",
- "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54",
+ "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d",
+ "reference": "638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d",
"shasum": ""
},
"require": {
@@ -1309,7 +1293,7 @@
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
- "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28"
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34"
},
"type": "library",
"extra": {
@@ -1351,7 +1335,7 @@
],
"support": {
"issues": "https://github.com/schmittjoh/php-option/issues",
- "source": "https://github.com/schmittjoh/php-option/tree/1.9.3"
+ "source": "https://github.com/schmittjoh/php-option/tree/1.9.4"
},
"funding": [
{
@@ -1363,7 +1347,7 @@
"type": "tidelift"
}
],
- "time": "2024-07-20T21:41:07+00:00"
+ "time": "2025-08-21T11:53:16+00:00"
},
{
"name": "psr/container",
@@ -1520,23 +1504,23 @@
},
{
"name": "react/promise",
- "version": "v3.2.0",
+ "version": "v3.3.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/promise.git",
- "reference": "8a164643313c71354582dc850b42b33fa12a4b63"
+ "reference": "23444f53a813a3296c1368bb104793ce8d88f04a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63",
- "reference": "8a164643313c71354582dc850b42b33fa12a4b63",
+ "url": "https://api.github.com/repos/reactphp/promise/zipball/23444f53a813a3296c1368bb104793ce8d88f04a",
+ "reference": "23444f53a813a3296c1368bb104793ce8d88f04a",
"shasum": ""
},
"require": {
"php": ">=7.1.0"
},
"require-dev": {
- "phpstan/phpstan": "1.10.39 || 1.4.10",
+ "phpstan/phpstan": "1.12.28 || 1.4.10",
"phpunit/phpunit": "^9.6 || ^7.5"
},
"type": "library",
@@ -1581,7 +1565,7 @@
],
"support": {
"issues": "https://github.com/reactphp/promise/issues",
- "source": "https://github.com/reactphp/promise/tree/v3.2.0"
+ "source": "https://github.com/reactphp/promise/tree/v3.3.0"
},
"funding": [
{
@@ -1589,7 +1573,7 @@
"type": "open_collective"
}
],
- "time": "2024-05-24T10:39:05+00:00"
+ "time": "2025-08-19T18:57:03+00:00"
},
{
"name": "seld/jsonlint",
@@ -1766,16 +1750,16 @@
},
{
"name": "symfony/console",
- "version": "v7.3.1",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "9e27aecde8f506ba0fd1d9989620c04a87697101"
+ "reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/9e27aecde8f506ba0fd1d9989620c04a87697101",
- "reference": "9e27aecde8f506ba0fd1d9989620c04a87697101",
+ "url": "https://api.github.com/repos/symfony/console/zipball/cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7",
+ "reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7",
"shasum": ""
},
"require": {
@@ -1840,7 +1824,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v7.3.1"
+ "source": "https://github.com/symfony/console/tree/v7.3.3"
},
"funding": [
{
@@ -1851,12 +1835,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-27T19:55:54+00:00"
+ "time": "2025-08-25T06:35:40+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -1927,16 +1915,16 @@
},
{
"name": "symfony/event-dispatcher",
- "version": "v7.3.0",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "497f73ac996a598c92409b44ac43b6690c4f666d"
+ "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d",
- "reference": "497f73ac996a598c92409b44ac43b6690c4f666d",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b7dc69e71de420ac04bc9ab830cf3ffebba48191",
+ "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191",
"shasum": ""
},
"require": {
@@ -1987,7 +1975,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.0"
+ "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.3"
},
"funding": [
{
@@ -1998,12 +1986,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-04-22T09:11:45+00:00"
+ "time": "2025-08-13T11:49:31+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@@ -2083,16 +2075,16 @@
},
{
"name": "symfony/filesystem",
- "version": "v7.3.0",
+ "version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb"
+ "reference": "edcbb768a186b5c3f25d0643159a787d3e63b7fd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb",
- "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/edcbb768a186b5c3f25d0643159a787d3e63b7fd",
+ "reference": "edcbb768a186b5c3f25d0643159a787d3e63b7fd",
"shasum": ""
},
"require": {
@@ -2129,7 +2121,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v7.3.0"
+ "source": "https://github.com/symfony/filesystem/tree/v7.3.2"
},
"funding": [
{
@@ -2140,25 +2132,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-10-25T15:15:23+00:00"
+ "time": "2025-07-07T08:17:47+00:00"
},
{
"name": "symfony/finder",
- "version": "v7.3.0",
+ "version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d"
+ "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/ec2344cf77a48253bbca6939aa3d2477773ea63d",
- "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/2a6614966ba1074fa93dae0bc804227422df4dfe",
+ "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe",
"shasum": ""
},
"require": {
@@ -2193,7 +2189,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/finder/tree/v7.3.0"
+ "source": "https://github.com/symfony/finder/tree/v7.3.2"
},
"funding": [
{
@@ -2204,25 +2200,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-12-30T19:00:26+00:00"
+ "time": "2025-07-15T13:41:35+00:00"
},
{
"name": "symfony/mailer",
- "version": "v7.3.1",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
- "reference": "b5db5105b290bdbea5ab27b89c69effcf1cb3368"
+ "reference": "a32f3f45f1990db8c4341d5122a7d3a381c7e575"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mailer/zipball/b5db5105b290bdbea5ab27b89c69effcf1cb3368",
- "reference": "b5db5105b290bdbea5ab27b89c69effcf1cb3368",
+ "url": "https://api.github.com/repos/symfony/mailer/zipball/a32f3f45f1990db8c4341d5122a7d3a381c7e575",
+ "reference": "a32f3f45f1990db8c4341d5122a7d3a381c7e575",
"shasum": ""
},
"require": {
@@ -2273,7 +2273,7 @@
"description": "Helps sending emails",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/mailer/tree/v7.3.1"
+ "source": "https://github.com/symfony/mailer/tree/v7.3.3"
},
"funding": [
{
@@ -2284,25 +2284,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-27T19:55:54+00:00"
+ "time": "2025-08-13T11:49:31+00:00"
},
{
"name": "symfony/mime",
- "version": "v7.3.0",
+ "version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
- "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9"
+ "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9",
- "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/e0a0f859148daf1edf6c60b398eb40bfc96697d1",
+ "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1",
"shasum": ""
},
"require": {
@@ -2357,7 +2361,7 @@
"mime-type"
],
"support": {
- "source": "https://github.com/symfony/mime/tree/v7.3.0"
+ "source": "https://github.com/symfony/mime/tree/v7.3.2"
},
"funding": [
{
@@ -2368,16 +2372,20 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-02-19T08:51:26+00:00"
+ "time": "2025-07-15T13:41:35+00:00"
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
@@ -2436,7 +2444,7 @@
"portable"
],
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0"
},
"funding": [
{
@@ -2447,6 +2455,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -2456,7 +2468,7 @@
},
{
"name": "symfony/polyfill-iconv",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-iconv.git",
@@ -2516,7 +2528,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-iconv/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-iconv/tree/v1.33.0"
},
"funding": [
{
@@ -2527,6 +2539,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -2536,16 +2552,16 @@
},
{
"name": "symfony/polyfill-intl-grapheme",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe"
+ "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
- "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70",
+ "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70",
"shasum": ""
},
"require": {
@@ -2594,7 +2610,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0"
},
"funding": [
{
@@ -2605,16 +2621,20 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2025-06-27T09:58:17+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
@@ -2677,7 +2697,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0"
},
"funding": [
{
@@ -2688,6 +2708,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -2697,7 +2721,7 @@
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
@@ -2758,7 +2782,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0"
},
"funding": [
{
@@ -2769,6 +2793,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -2778,7 +2806,7 @@
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
@@ -2839,7 +2867,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0"
},
"funding": [
{
@@ -2850,6 +2878,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -2924,7 +2956,7 @@
},
{
"name": "symfony/polyfill-php73",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php73.git",
@@ -2980,7 +3012,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php73/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-php73/tree/v1.33.0"
},
"funding": [
{
@@ -2991,6 +3023,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -3000,7 +3036,7 @@
},
{
"name": "symfony/polyfill-php80",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
@@ -3060,7 +3096,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0"
},
"funding": [
{
@@ -3071,6 +3107,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -3080,7 +3120,7 @@
},
{
"name": "symfony/polyfill-php81",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php81.git",
@@ -3136,7 +3176,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php81/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-php81/tree/v1.33.0"
},
"funding": [
{
@@ -3147,6 +3187,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -3156,16 +3200,16 @@
},
{
"name": "symfony/process",
- "version": "v6.4.20",
+ "version": "v6.4.25",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20"
+ "reference": "6be2f0c9ab3428587c07bed03aa9e3d1b823c6c8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/e2a61c16af36c9a07e5c9906498b73e091949a20",
- "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20",
+ "url": "https://api.github.com/repos/symfony/process/zipball/6be2f0c9ab3428587c07bed03aa9e3d1b823c6c8",
+ "reference": "6be2f0c9ab3428587c07bed03aa9e3d1b823c6c8",
"shasum": ""
},
"require": {
@@ -3197,7 +3241,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v6.4.20"
+ "source": "https://github.com/symfony/process/tree/v6.4.25"
},
"funding": [
{
@@ -3208,12 +3252,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-03-10T17:11:00+00:00"
+ "time": "2025-08-14T06:23:17+00:00"
},
{
"name": "symfony/service-contracts",
@@ -3300,16 +3348,16 @@
},
{
"name": "symfony/string",
- "version": "v7.3.0",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125"
+ "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/f3570b8c61ca887a9e2938e85cb6458515d2b125",
- "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125",
+ "url": "https://api.github.com/repos/symfony/string/zipball/17a426cce5fd1f0901fefa9b2a490d0038fd3c9c",
+ "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c",
"shasum": ""
},
"require": {
@@ -3367,7 +3415,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v7.3.0"
+ "source": "https://github.com/symfony/string/tree/v7.3.3"
},
"funding": [
{
@@ -3378,69 +3426,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-04-20T20:19:01+00:00"
- },
- {
- "name": "ui-awesome/html",
- "version": "0.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/ui-awesome/html.git",
- "reference": "bc6ae50a3abdea7a5e149a2752787e9d381159e0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ui-awesome/html/zipball/bc6ae50a3abdea7a5e149a2752787e9d381159e0",
- "reference": "bc6ae50a3abdea7a5e149a2752787e9d381159e0",
- "shasum": ""
- },
- "require": {
- "ext-mbstring": "*",
- "php": "^8.1",
- "php-forge/awesome-widget": "^0.1.2",
- "ui-awesome/html-attribute": "^0.2",
- "ui-awesome/html-concern": "^0.2",
- "ui-awesome/html-core": "^0.1",
- "ui-awesome/html-helper": "^0.2",
- "ui-awesome/html-interop": "^0.1"
- },
- "require-dev": {
- "maglnet/composer-require-checker": "^4.7",
- "php-forge/support": "^0.1",
- "phpunit/phpunit": "^10.5",
- "roave/infection-static-analysis-plugin": "^1.34",
- "symplify/easy-coding-standard": "^12.1",
- "vimeo/psalm": "^5.20"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "UIAwesome\\Html\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "description": "UI Awesome HTML Code Generator for PHP.",
- "keywords": [
- "code-generator",
- "html",
- "php",
- "ui-awesome"
- ],
- "support": {
- "issues": "https://github.com/ui-awesome/html/issues",
- "source": "https://github.com/ui-awesome/html/tree/0.3.0"
- },
- "time": "2024-03-31T12:21:24+00:00"
+ "time": "2025-08-25T06:35:40+00:00"
},
{
"name": "ui-awesome/html-attribute",
@@ -3497,64 +3492,6 @@
},
"time": "2024-03-30T17:55:29+00:00"
},
- {
- "name": "ui-awesome/html-component-bootstrap5",
- "version": "dev-main",
- "source": {
- "type": "git",
- "url": "https://github.com/ui-awesome/html-component-bootstrap5.git",
- "reference": "aab2bcd36f19d4a3a19c011868a603e38ff023bb"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ui-awesome/html-component-bootstrap5/zipball/aab2bcd36f19d4a3a19c011868a603e38ff023bb",
- "reference": "aab2bcd36f19d4a3a19c011868a603e38ff023bb",
- "shasum": ""
- },
- "require": {
- "php": "^8.1",
- "php-forge/awesome-widget": "^0.1",
- "ui-awesome/html-core-component": "^0.1",
- "ui-awesome/html-helper": "^0.2",
- "ui-awesome/html-svg": "^0.2"
- },
- "require-dev": {
- "maglnet/composer-require-checker": "^4.7",
- "php-forge/support": "^0.1",
- "phpunit/phpunit": "^10.5",
- "roave/infection-static-analysis-plugin": "^1.34",
- "symplify/easy-coding-standard": "^12.1",
- "vimeo/psalm": "^5.20"
- },
- "default-branch": true,
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "UIAwesome\\Html\\Component\\Bootstrap5\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "mit"
- ],
- "description": "UI Awesome HTML Component Bootstrap5 for PHP.",
- "keywords": [
- "bootstrap5",
- "html-component",
- "php",
- "ui-awesome"
- ],
- "support": {
- "issues": "https://github.com/ui-awesome/html-component-bootstrap5/issues",
- "source": "https://github.com/ui-awesome/html-component-bootstrap5/tree/main"
- },
- "time": "2024-03-31T13:56:53+00:00"
- },
{
"name": "ui-awesome/html-concern",
"version": "0.2.0",
@@ -3668,66 +3605,6 @@
},
"time": "2024-03-30T20:03:08+00:00"
},
- {
- "name": "ui-awesome/html-core-component",
- "version": "0.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/ui-awesome/html-core-component.git",
- "reference": "5d87762328528943a9a964adb75e43715fbca0dc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ui-awesome/html-core-component/zipball/5d87762328528943a9a964adb75e43715fbca0dc",
- "reference": "5d87762328528943a9a964adb75e43715fbca0dc",
- "shasum": ""
- },
- "require": {
- "php": "^8.1",
- "php-forge/awesome-widget": "^0.1",
- "ui-awesome/html-attribute": "^0.2",
- "ui-awesome/html-concern": "^0.2",
- "ui-awesome/html-core": "^0.1",
- "ui-awesome/html-helper": "^0.2",
- "ui-awesome/html-interop": "^0.1",
- "ui-awesome/html-svg": "^0.2"
- },
- "require-dev": {
- "maglnet/composer-require-checker": "^4.7",
- "php-forge/support": "^0.1",
- "phpunit/phpunit": "^10.5",
- "roave/infection-static-analysis-plugin": "^1.34",
- "symplify/easy-coding-standard": "^12.1",
- "vimeo/psalm": "^5.20"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "UIAwesome\\Html\\Core\\Component\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "mit"
- ],
- "description": "UI Awesome HTML Core Component for PHP.",
- "keywords": [
- "core-component",
- "html",
- "php",
- "ui-awesome"
- ],
- "support": {
- "issues": "https://github.com/ui-awesome/html-core-component/issues",
- "source": "https://github.com/ui-awesome/html-core-component/tree/0.1.0"
- },
- "time": "2024-03-31T13:16:51+00:00"
- },
{
"name": "ui-awesome/html-helper",
"version": "0.2.0",
@@ -4241,68 +4118,6 @@
],
"time": "2023-03-08T08:35:38+00:00"
},
- {
- "name": "yii2-extensions/localeurls",
- "version": "0.1.2",
- "source": {
- "type": "git",
- "url": "https://github.com/yii2-extensions/localeurls.git",
- "reference": "c6efcdb3cae20b7098b9085585d7f1efc0806da5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/yii2-extensions/localeurls/zipball/c6efcdb3cae20b7098b9085585d7f1efc0806da5",
- "reference": "c6efcdb3cae20b7098b9085585d7f1efc0806da5",
- "shasum": ""
- },
- "require": {
- "ext-mbstring": "*",
- "php": ">=8.1",
- "yiisoft/yii2": "^2.0.53|^22"
- },
- "require-dev": {
- "infection/infection": "^0.27|^0.30",
- "maglnet/composer-require-checker": "^4.1",
- "phpstan/extension-installer": "^1.4",
- "phpstan/phpstan-strict-rules": "^2.0.3",
- "phpunit/phpunit": "^10.5",
- "rector/rector": "^2.1",
- "symplify/easy-coding-standard": "^12.5",
- "yii2-extensions/phpstan": "^0.3.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "0.1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "yii2\\extensions\\localeurls\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "description": "Automatic locale/language management for URLs.",
- "keywords": [
- "i18n",
- "locale",
- "yii2"
- ],
- "support": {
- "issues": "https://github.com/yii2-extensions/localeurls/issues",
- "source": "https://github.com/yii2-extensions/localeurls/tree/0.1.2"
- },
- "funding": [
- {
- "url": "https://github.com/terabytesoftw",
- "type": "github"
- }
- ],
- "time": "2025-07-04T14:01:43+00:00"
- },
{
"name": "yiisoft/yii2",
"version": "2.0.53",
@@ -5324,20 +5139,20 @@
},
{
"name": "codeception/stub",
- "version": "4.1.4",
+ "version": "4.2.0",
"source": {
"type": "git",
"url": "https://github.com/Codeception/Stub.git",
- "reference": "6ce453073a0c220b254dd7f4383645615e4071c3"
+ "reference": "19014cec368cefc0579499779c451551cd288557"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Codeception/Stub/zipball/6ce453073a0c220b254dd7f4383645615e4071c3",
- "reference": "6ce453073a0c220b254dd7f4383645615e4071c3",
+ "url": "https://api.github.com/repos/Codeception/Stub/zipball/19014cec368cefc0579499779c451551cd288557",
+ "reference": "19014cec368cefc0579499779c451551cd288557",
"shasum": ""
},
"require": {
- "php": "^7.4 | ^8.0",
+ "php": "^8.1",
"phpunit/phpunit": "^8.4 | ^9.0 | ^10.0 | ^11 | ^12"
},
"conflict": {
@@ -5359,9 +5174,9 @@
"description": "Flexible Stub wrapper for PHPUnit's Mock Builder",
"support": {
"issues": "https://github.com/Codeception/Stub/issues",
- "source": "https://github.com/Codeception/Stub/tree/4.1.4"
+ "source": "https://github.com/Codeception/Stub/tree/4.2.0"
},
- "time": "2025-02-14T06:56:33+00:00"
+ "time": "2025-08-01T08:15:29+00:00"
},
{
"name": "codeception/verify",
@@ -5414,22 +5229,22 @@
},
{
"name": "guzzlehttp/guzzle",
- "version": "7.9.3",
+ "version": "7.10.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
- "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77"
+ "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77",
- "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
+ "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
"shasum": ""
},
"require": {
"ext-json": "*",
- "guzzlehttp/promises": "^1.5.3 || ^2.0.3",
- "guzzlehttp/psr7": "^2.7.0",
+ "guzzlehttp/promises": "^2.3",
+ "guzzlehttp/psr7": "^2.8",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.2 || ^3.0"
@@ -5520,7 +5335,7 @@
],
"support": {
"issues": "https://github.com/guzzle/guzzle/issues",
- "source": "https://github.com/guzzle/guzzle/tree/7.9.3"
+ "source": "https://github.com/guzzle/guzzle/tree/7.10.0"
},
"funding": [
{
@@ -5536,20 +5351,20 @@
"type": "tidelift"
}
],
- "time": "2025-03-27T13:37:11+00:00"
+ "time": "2025-08-23T22:36:01+00:00"
},
{
"name": "guzzlehttp/promises",
- "version": "2.2.0",
+ "version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
- "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c"
+ "reference": "481557b130ef3790cf82b713667b43030dc9c957"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c",
- "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957",
+ "reference": "481557b130ef3790cf82b713667b43030dc9c957",
"shasum": ""
},
"require": {
@@ -5557,7 +5372,7 @@
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
- "phpunit/phpunit": "^8.5.39 || ^9.6.20"
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25"
},
"type": "library",
"extra": {
@@ -5603,7 +5418,7 @@
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
- "source": "https://github.com/guzzle/promises/tree/2.2.0"
+ "source": "https://github.com/guzzle/promises/tree/2.3.0"
},
"funding": [
{
@@ -5619,20 +5434,20 @@
"type": "tidelift"
}
],
- "time": "2025-03-27T13:27:01+00:00"
+ "time": "2025-08-22T14:34:08+00:00"
},
{
"name": "guzzlehttp/psr7",
- "version": "2.7.1",
+ "version": "2.8.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16"
+ "reference": "21dc724a0583619cd1652f673303492272778051"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16",
- "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051",
+ "reference": "21dc724a0583619cd1652f673303492272778051",
"shasum": ""
},
"require": {
@@ -5648,7 +5463,7 @@
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"http-interop/http-factory-tests": "0.9.0",
- "phpunit/phpunit": "^8.5.39 || ^9.6.20"
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25"
},
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
@@ -5719,7 +5534,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.7.1"
+ "source": "https://github.com/guzzle/psr7/tree/2.8.0"
},
"funding": [
{
@@ -5735,7 +5550,7 @@
"type": "tidelift"
}
],
- "time": "2025-03-27T12:30:47+00:00"
+ "time": "2025-08-23T21:21:41+00:00"
},
{
"name": "maglnet/composer-require-checker",
@@ -5820,16 +5635,16 @@
},
{
"name": "masterminds/html5",
- "version": "2.9.0",
+ "version": "2.10.0",
"source": {
"type": "git",
"url": "https://github.com/Masterminds/html5-php.git",
- "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6"
+ "reference": "fcf91eb64359852f00d921887b219479b4f21251"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6",
- "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6",
+ "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251",
+ "reference": "fcf91eb64359852f00d921887b219479b4f21251",
"shasum": ""
},
"require": {
@@ -5881,22 +5696,22 @@
],
"support": {
"issues": "https://github.com/Masterminds/html5-php/issues",
- "source": "https://github.com/Masterminds/html5-php/tree/2.9.0"
+ "source": "https://github.com/Masterminds/html5-php/tree/2.10.0"
},
- "time": "2024-03-31T07:05:07+00:00"
+ "time": "2025-07-25T09:04:22+00:00"
},
{
"name": "myclabs/deep-copy",
- "version": "1.13.3",
+ "version": "1.13.4",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "faed855a7b5f4d4637717c2b3863e277116beb36"
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/faed855a7b5f4d4637717c2b3863e277116beb36",
- "reference": "faed855a7b5f4d4637717c2b3863e277116beb36",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a",
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a",
"shasum": ""
},
"require": {
@@ -5935,7 +5750,7 @@
],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.13.3"
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4"
},
"funding": [
{
@@ -5943,20 +5758,20 @@
"type": "tidelift"
}
],
- "time": "2025-07-05T12:25:42+00:00"
+ "time": "2025-08-01T08:46:24+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v5.5.0",
+ "version": "v5.6.1",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "ae59794362fe85e051a58ad36b289443f57be7a9"
+ "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ae59794362fe85e051a58ad36b289443f57be7a9",
- "reference": "ae59794362fe85e051a58ad36b289443f57be7a9",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2",
+ "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2",
"shasum": ""
},
"require": {
@@ -5975,7 +5790,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "5.x-dev"
}
},
"autoload": {
@@ -5999,9 +5814,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.5.0"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.1"
},
- "time": "2025-05-31T08:24:38+00:00"
+ "time": "2025-08-13T20:13:15+00:00"
},
{
"name": "phar-io/manifest",
@@ -6212,16 +6027,16 @@
},
{
"name": "phpstan/phpstan",
- "version": "2.1.17",
+ "version": "2.1.22",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
- "reference": "89b5ef665716fa2a52ecd2633f21007a6a349053"
+ "reference": "41600c8379eb5aee63e9413fe9e97273e25d57e4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/89b5ef665716fa2a52ecd2633f21007a6a349053",
- "reference": "89b5ef665716fa2a52ecd2633f21007a6a349053",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/41600c8379eb5aee63e9413fe9e97273e25d57e4",
+ "reference": "41600c8379eb5aee63e9413fe9e97273e25d57e4",
"shasum": ""
},
"require": {
@@ -6266,20 +6081,20 @@
"type": "github"
}
],
- "time": "2025-05-21T20:55:28+00:00"
+ "time": "2025-08-04T19:17:37+00:00"
},
{
"name": "phpstan/phpstan-strict-rules",
- "version": "2.0.4",
+ "version": "2.0.6",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-strict-rules.git",
- "reference": "3e139cbe67fafa3588e1dbe27ca50f31fdb6236a"
+ "reference": "f9f77efa9de31992a832ff77ea52eb42d675b094"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/3e139cbe67fafa3588e1dbe27ca50f31fdb6236a",
- "reference": "3e139cbe67fafa3588e1dbe27ca50f31fdb6236a",
+ "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/f9f77efa9de31992a832ff77ea52eb42d675b094",
+ "reference": "f9f77efa9de31992a832ff77ea52eb42d675b094",
"shasum": ""
},
"require": {
@@ -6312,22 +6127,22 @@
"description": "Extra strict and opinionated rules for PHPStan",
"support": {
"issues": "https://github.com/phpstan/phpstan-strict-rules/issues",
- "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.4"
+ "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.6"
},
- "time": "2025-03-18T11:42:40+00:00"
+ "time": "2025-07-21T12:19:29+00:00"
},
{
"name": "phpunit/php-code-coverage",
- "version": "12.3.1",
+ "version": "12.3.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "ddec29dfc128eba9c204389960f2063f3b7fa170"
+ "reference": "7ad0e9bdc72b147600badccd694a2e57ffc9297a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ddec29dfc128eba9c204389960f2063f3b7fa170",
- "reference": "ddec29dfc128eba9c204389960f2063f3b7fa170",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7ad0e9bdc72b147600badccd694a2e57ffc9297a",
+ "reference": "7ad0e9bdc72b147600badccd694a2e57ffc9297a",
"shasum": ""
},
"require": {
@@ -6383,7 +6198,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.3.1"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.3.4"
},
"funding": [
{
@@ -6403,7 +6218,7 @@
"type": "tidelift"
}
],
- "time": "2025-06-18T08:58:13+00:00"
+ "time": "2025-08-29T11:32:44+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -6652,16 +6467,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "12.2.7",
+ "version": "12.3.7",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "8b1348b254e5959acaf1539c6bd790515fb49414"
+ "reference": "b8fa997c49682979ad6bfaa0d7fb25f54954965e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8b1348b254e5959acaf1539c6bd790515fb49414",
- "reference": "8b1348b254e5959acaf1539c6bd790515fb49414",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b8fa997c49682979ad6bfaa0d7fb25f54954965e",
+ "reference": "b8fa997c49682979ad6bfaa0d7fb25f54954965e",
"shasum": ""
},
"require": {
@@ -6671,23 +6486,23 @@
"ext-mbstring": "*",
"ext-xml": "*",
"ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.13.3",
+ "myclabs/deep-copy": "^1.13.4",
"phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.2.1",
"php": ">=8.3",
- "phpunit/php-code-coverage": "^12.3.1",
+ "phpunit/php-code-coverage": "^12.3.3",
"phpunit/php-file-iterator": "^6.0.0",
"phpunit/php-invoker": "^6.0.0",
"phpunit/php-text-template": "^5.0.0",
"phpunit/php-timer": "^8.0.0",
"sebastian/cli-parser": "^4.0.0",
- "sebastian/comparator": "^7.1.0",
+ "sebastian/comparator": "^7.1.3",
"sebastian/diff": "^7.0.0",
- "sebastian/environment": "^8.0.2",
+ "sebastian/environment": "^8.0.3",
"sebastian/exporter": "^7.0.0",
"sebastian/global-state": "^8.0.0",
"sebastian/object-enumerator": "^7.0.0",
- "sebastian/type": "^6.0.2",
+ "sebastian/type": "^6.0.3",
"sebastian/version": "^6.0.0",
"staabm/side-effects-detector": "^1.0.5"
},
@@ -6697,7 +6512,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "12.2-dev"
+ "dev-main": "12.3-dev"
}
},
"autoload": {
@@ -6729,7 +6544,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/12.2.7"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/12.3.7"
},
"funding": [
{
@@ -6753,7 +6568,7 @@
"type": "tidelift"
}
],
- "time": "2025-07-11T04:11:13+00:00"
+ "time": "2025-08-28T05:15:46+00:00"
},
{
"name": "psr/http-client",
@@ -6917,16 +6732,16 @@
},
{
"name": "psy/psysh",
- "version": "v0.12.9",
+ "version": "v0.12.10",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
- "reference": "1b801844becfe648985372cb4b12ad6840245ace"
+ "reference": "6e80abe6f2257121f1eb9a4c55bf29d921025b22"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/1b801844becfe648985372cb4b12ad6840245ace",
- "reference": "1b801844becfe648985372cb4b12ad6840245ace",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/6e80abe6f2257121f1eb9a4c55bf29d921025b22",
+ "reference": "6e80abe6f2257121f1eb9a4c55bf29d921025b22",
"shasum": ""
},
"require": {
@@ -6976,12 +6791,11 @@
"authors": [
{
"name": "Justin Hileman",
- "email": "justin@justinhileman.info",
- "homepage": "http://justinhileman.com"
+ "email": "justin@justinhileman.info"
}
],
"description": "An interactive shell for modern PHP.",
- "homepage": "http://psysh.org",
+ "homepage": "https://psysh.org",
"keywords": [
"REPL",
"console",
@@ -6990,9 +6804,9 @@
],
"support": {
"issues": "https://github.com/bobthecow/psysh/issues",
- "source": "https://github.com/bobthecow/psysh/tree/v0.12.9"
+ "source": "https://github.com/bobthecow/psysh/tree/v0.12.10"
},
- "time": "2025-06-23T02:35:06+00:00"
+ "time": "2025-08-04T12:39:37+00:00"
},
{
"name": "ralouphie/getallheaders",
@@ -7040,21 +6854,21 @@
},
{
"name": "rector/rector",
- "version": "2.1.1",
+ "version": "2.1.4",
"source": {
"type": "git",
"url": "https://github.com/rectorphp/rector.git",
- "reference": "d0917c069bb0d9bb06ed111cf052510f609015a4"
+ "reference": "fe613c528819222f8686a9a037a315ef9d4915b3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/rectorphp/rector/zipball/d0917c069bb0d9bb06ed111cf052510f609015a4",
- "reference": "d0917c069bb0d9bb06ed111cf052510f609015a4",
+ "url": "https://api.github.com/repos/rectorphp/rector/zipball/fe613c528819222f8686a9a037a315ef9d4915b3",
+ "reference": "fe613c528819222f8686a9a037a315ef9d4915b3",
"shasum": ""
},
"require": {
"php": "^7.4|^8.0",
- "phpstan/phpstan": "^2.1.17"
+ "phpstan/phpstan": "^2.1.18"
},
"conflict": {
"rector/rector-doctrine": "*",
@@ -7088,7 +6902,7 @@
],
"support": {
"issues": "https://github.com/rectorphp/rector/issues",
- "source": "https://github.com/rectorphp/rector/tree/2.1.1"
+ "source": "https://github.com/rectorphp/rector/tree/2.1.4"
},
"funding": [
{
@@ -7096,7 +6910,7 @@
"type": "github"
}
],
- "time": "2025-07-10T11:31:31+00:00"
+ "time": "2025-08-15T14:41:36+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -7157,16 +6971,16 @@
},
{
"name": "sebastian/comparator",
- "version": "7.1.0",
+ "version": "7.1.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "03d905327dccc0851c9a08d6a979dfc683826b6f"
+ "reference": "dc904b4bb3ab070865fa4068cd84f3da8b945148"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/03d905327dccc0851c9a08d6a979dfc683826b6f",
- "reference": "03d905327dccc0851c9a08d6a979dfc683826b6f",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/dc904b4bb3ab070865fa4068cd84f3da8b945148",
+ "reference": "dc904b4bb3ab070865fa4068cd84f3da8b945148",
"shasum": ""
},
"require": {
@@ -7225,7 +7039,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
"security": "https://github.com/sebastianbergmann/comparator/security/policy",
- "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.0"
+ "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.3"
},
"funding": [
{
@@ -7245,7 +7059,7 @@
"type": "tidelift"
}
],
- "time": "2025-06-17T07:41:58+00:00"
+ "time": "2025-08-20T11:27:00+00:00"
},
{
"name": "sebastian/complexity",
@@ -7374,16 +7188,16 @@
},
{
"name": "sebastian/environment",
- "version": "8.0.2",
+ "version": "8.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "d364b9e5d0d3b18a2573351a1786fbf96b7e0792"
+ "reference": "24a711b5c916efc6d6e62aa65aa2ec98fef77f68"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d364b9e5d0d3b18a2573351a1786fbf96b7e0792",
- "reference": "d364b9e5d0d3b18a2573351a1786fbf96b7e0792",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/24a711b5c916efc6d6e62aa65aa2ec98fef77f68",
+ "reference": "24a711b5c916efc6d6e62aa65aa2ec98fef77f68",
"shasum": ""
},
"require": {
@@ -7426,7 +7240,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/environment/issues",
"security": "https://github.com/sebastianbergmann/environment/security/policy",
- "source": "https://github.com/sebastianbergmann/environment/tree/8.0.2"
+ "source": "https://github.com/sebastianbergmann/environment/tree/8.0.3"
},
"funding": [
{
@@ -7446,7 +7260,7 @@
"type": "tidelift"
}
],
- "time": "2025-05-21T15:05:44+00:00"
+ "time": "2025-08-12T14:11:56+00:00"
},
{
"name": "sebastian/exporter",
@@ -7528,16 +7342,16 @@
},
{
"name": "sebastian/global-state",
- "version": "8.0.0",
+ "version": "8.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "570a2aeb26d40f057af686d63c4e99b075fb6cbc"
+ "reference": "ef1377171613d09edd25b7816f05be8313f9115d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/570a2aeb26d40f057af686d63c4e99b075fb6cbc",
- "reference": "570a2aeb26d40f057af686d63c4e99b075fb6cbc",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/ef1377171613d09edd25b7816f05be8313f9115d",
+ "reference": "ef1377171613d09edd25b7816f05be8313f9115d",
"shasum": ""
},
"require": {
@@ -7578,15 +7392,27 @@
"support": {
"issues": "https://github.com/sebastianbergmann/global-state/issues",
"security": "https://github.com/sebastianbergmann/global-state/security/policy",
- "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.0"
+ "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.2"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/global-state",
+ "type": "tidelift"
}
],
- "time": "2025-02-07T04:56:59+00:00"
+ "time": "2025-08-29T11:29:25+00:00"
},
{
"name": "sebastian/lines-of-code",
@@ -7762,16 +7588,16 @@
},
{
"name": "sebastian/recursion-context",
- "version": "7.0.0",
+ "version": "7.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "c405ae3a63e01b32eb71577f8ec1604e39858a7c"
+ "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/c405ae3a63e01b32eb71577f8ec1604e39858a7c",
- "reference": "c405ae3a63e01b32eb71577f8ec1604e39858a7c",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0b01998a7d5b1f122911a66bebcb8d46f0c82d8c",
+ "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c",
"shasum": ""
},
"require": {
@@ -7814,28 +7640,40 @@
"support": {
"issues": "https://github.com/sebastianbergmann/recursion-context/issues",
"security": "https://github.com/sebastianbergmann/recursion-context/security/policy",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/7.0.0"
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/7.0.1"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context",
+ "type": "tidelift"
}
],
- "time": "2025-02-07T05:00:01+00:00"
+ "time": "2025-08-13T04:44:59+00:00"
},
{
"name": "sebastian/type",
- "version": "6.0.2",
+ "version": "6.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/type.git",
- "reference": "1d7cd6e514384c36d7a390347f57c385d4be6069"
+ "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/1d7cd6e514384c36d7a390347f57c385d4be6069",
- "reference": "1d7cd6e514384c36d7a390347f57c385d4be6069",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/e549163b9760b8f71f191651d22acf32d56d6d4d",
+ "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d",
"shasum": ""
},
"require": {
@@ -7871,15 +7709,27 @@
"support": {
"issues": "https://github.com/sebastianbergmann/type/issues",
"security": "https://github.com/sebastianbergmann/type/security/policy",
- "source": "https://github.com/sebastianbergmann/type/tree/6.0.2"
+ "source": "https://github.com/sebastianbergmann/type/tree/6.0.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/type",
+ "type": "tidelift"
}
],
- "time": "2025-03-18T13:37:31+00:00"
+ "time": "2025-08-09T06:57:12+00:00"
},
{
"name": "sebastian/version",
@@ -7989,16 +7839,16 @@
},
{
"name": "symfony/browser-kit",
- "version": "v6.4.19",
+ "version": "v6.4.24",
"source": {
"type": "git",
"url": "https://github.com/symfony/browser-kit.git",
- "reference": "ce95f3e3239159e7fa3be7690c6ce95a4714637f"
+ "reference": "3537d17782f8c20795b194acb6859071b60c6fac"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/browser-kit/zipball/ce95f3e3239159e7fa3be7690c6ce95a4714637f",
- "reference": "ce95f3e3239159e7fa3be7690c6ce95a4714637f",
+ "url": "https://api.github.com/repos/symfony/browser-kit/zipball/3537d17782f8c20795b194acb6859071b60c6fac",
+ "reference": "3537d17782f8c20795b194acb6859071b60c6fac",
"shasum": ""
},
"require": {
@@ -8037,7 +7887,7 @@
"description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/browser-kit/tree/v6.4.19"
+ "source": "https://github.com/symfony/browser-kit/tree/v6.4.24"
},
"funding": [
{
@@ -8048,12 +7898,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-02-14T11:23:16+00:00"
+ "time": "2025-07-10T08:14:14+00:00"
},
{
"name": "symfony/css-selector",
@@ -8122,16 +7976,16 @@
},
{
"name": "symfony/dom-crawler",
- "version": "v7.3.1",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/dom-crawler.git",
- "reference": "8b2ee2e06ab99fa5f067b6699296d4e35c156bb9"
+ "reference": "efa076ea0eeff504383ff0dcf827ea5ce15690ba"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/8b2ee2e06ab99fa5f067b6699296d4e35c156bb9",
- "reference": "8b2ee2e06ab99fa5f067b6699296d4e35c156bb9",
+ "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/efa076ea0eeff504383ff0dcf827ea5ce15690ba",
+ "reference": "efa076ea0eeff504383ff0dcf827ea5ce15690ba",
"shasum": ""
},
"require": {
@@ -8169,7 +8023,7 @@
"description": "Eases DOM navigation for HTML and XML documents",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/dom-crawler/tree/v7.3.1"
+ "source": "https://github.com/symfony/dom-crawler/tree/v7.3.3"
},
"funding": [
{
@@ -8180,25 +8034,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-15T10:07:06+00:00"
+ "time": "2025-08-06T20:13:54+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v7.3.1",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "6e209fbe5f5a7b6043baba46fe5735a4b85d0d42"
+ "reference": "34d8d4c4b9597347306d1ec8eb4e1319b1e6986f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6e209fbe5f5a7b6043baba46fe5735a4b85d0d42",
- "reference": "6e209fbe5f5a7b6043baba46fe5735a4b85d0d42",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/34d8d4c4b9597347306d1ec8eb4e1319b1e6986f",
+ "reference": "34d8d4c4b9597347306d1ec8eb4e1319b1e6986f",
"shasum": ""
},
"require": {
@@ -8210,7 +8068,6 @@
"symfony/console": "<6.4"
},
"require-dev": {
- "ext-iconv": "*",
"symfony/console": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/process": "^6.4|^7.0",
@@ -8253,7 +8110,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v7.3.1"
+ "source": "https://github.com/symfony/var-dumper/tree/v7.3.3"
},
"funding": [
{
@@ -8264,25 +8121,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-27T19:55:54+00:00"
+ "time": "2025-08-13T11:49:31+00:00"
},
{
"name": "symfony/yaml",
- "version": "v7.3.1",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "0c3555045a46ab3cd4cc5a69d161225195230edb"
+ "reference": "d4f4a66866fe2451f61296924767280ab5732d9d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/0c3555045a46ab3cd4cc5a69d161225195230edb",
- "reference": "0c3555045a46ab3cd4cc5a69d161225195230edb",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/d4f4a66866fe2451f61296924767280ab5732d9d",
+ "reference": "d4f4a66866fe2451f61296924767280ab5732d9d",
"shasum": ""
},
"require": {
@@ -8325,7 +8186,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v7.3.1"
+ "source": "https://github.com/symfony/yaml/tree/v7.3.3"
},
"funding": [
{
@@ -8336,25 +8197,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-03T06:57:57+00:00"
+ "time": "2025-08-27T11:34:33+00:00"
},
{
"name": "symplify/easy-coding-standard",
- "version": "12.5.20",
+ "version": "12.5.24",
"source": {
"type": "git",
"url": "https://github.com/easy-coding-standard/easy-coding-standard.git",
- "reference": "bb44b0fc70dd2148d8a6362bc66a35e23dc31bc4"
+ "reference": "4b90f2b6efed9508000968eac2397ac7aff34354"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/bb44b0fc70dd2148d8a6362bc66a35e23dc31bc4",
- "reference": "bb44b0fc70dd2148d8a6362bc66a35e23dc31bc4",
+ "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/4b90f2b6efed9508000968eac2397ac7aff34354",
+ "reference": "4b90f2b6efed9508000968eac2397ac7aff34354",
"shasum": ""
},
"require": {
@@ -8390,7 +8255,7 @@
],
"support": {
"issues": "https://github.com/easy-coding-standard/easy-coding-standard/issues",
- "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.5.20"
+ "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.5.24"
},
"funding": [
{
@@ -8402,7 +8267,7 @@
"type": "github"
}
],
- "time": "2025-05-30T11:42:07+00:00"
+ "time": "2025-08-21T06:57:14+00:00"
},
{
"name": "theseer/tokenizer",
@@ -8563,16 +8428,16 @@
},
{
"name": "yii2-extensions/phpstan",
- "version": "0.3.0",
+ "version": "0.3.1",
"source": {
"type": "git",
"url": "https://github.com/yii2-extensions/phpstan.git",
- "reference": "e3647c8bbd61bb85b3a4a21a1e2bc8ef0a86836c"
+ "reference": "3cc2419f6776088571a7e018fb73a75b58fc35aa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/yii2-extensions/phpstan/zipball/e3647c8bbd61bb85b3a4a21a1e2bc8ef0a86836c",
- "reference": "e3647c8bbd61bb85b3a4a21a1e2bc8ef0a86836c",
+ "url": "https://api.github.com/repos/yii2-extensions/phpstan/zipball/3cc2419f6776088571a7e018fb73a75b58fc35aa",
+ "reference": "3cc2419f6776088571a7e018fb73a75b58fc35aa",
"shasum": ""
},
"require": {
@@ -8615,7 +8480,7 @@
],
"support": {
"issues": "https://github.com/yii2-extensions/phpstan/issues",
- "source": "https://github.com/yii2-extensions/phpstan/tree/0.3.0"
+ "source": "https://github.com/yii2-extensions/phpstan/tree/0.3.1"
},
"funding": [
{
@@ -8623,7 +8488,7 @@
"type": "github"
}
],
- "time": "2025-06-27T09:08:58+00:00"
+ "time": "2025-08-16T14:57:16+00:00"
},
{
"name": "yiisoft/yii2-debug",
@@ -8807,9 +8672,7 @@
],
"aliases": [],
"minimum-stability": "stable",
- "stability-flags": {
- "ui-awesome/html-component-bootstrap5": 20
- },
+ "stability-flags": {},
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
diff --git a/config/console/app.php b/config/console/app.php
index 1910665..33ffc39 100644
--- a/config/console/app.php
+++ b/config/console/app.php
@@ -3,7 +3,6 @@
declare(strict_types=1);
use app\usecase\hello\HelloController;
-use yii\console\controllers\ServeController;
/** @var string[] $components */
$components = require dirname(__DIR__) . '/common/components.php';
@@ -12,20 +11,9 @@
return [
'id' => 'console.basic',
- 'aliases' => [
- '@root' => dirname(__DIR__, 2),
- ],
'basePath' => dirname(__DIR__, 2),
- 'bootstrap' => [
- 'log',
- ],
+ 'bootstrap' => ['log'],
'components' => $components,
- 'controllerMap' => [
- 'hello' => HelloController::class,
- 'serve' => [
- 'class' => ServeController::class,
- 'docroot' => '@app/public',
- ],
- ],
+ 'controllerMap' => ['hello' => HelloController::class],
'params' => $params,
];
diff --git a/config/web/app.php b/config/web/app.php
index 5b31419..fcd9a74 100644
--- a/config/web/app.php
+++ b/config/web/app.php
@@ -2,9 +2,6 @@
declare(strict_types=1);
-use app\framework\event\ContactEventHandler;
-use app\usecase\contact\ContactController;
-use app\usecase\security\SecurityController;
use app\usecase\site\SiteController;
/** @phpstan-var string[] $components */
@@ -22,27 +19,14 @@
'@root' => $rootDir,
'@npm' => '@root/node_modules',
'@bower' => '@npm',
- '@public' => '@root/public',
'@resource' => '@root/src/framework/resource',
'@runtime' => '@root/runtime',
- '@web' => '/',
],
'basePath' => $rootDir,
- 'bootstrap' => [
- ContactEventHandler::class,
- 'log',
- ],
+ 'bootstrap' => ['log'],
'components' => $components,
'controllerMap' => [
- 'contact' => [
- 'class' => ContactController::class,
- ],
- 'security' => [
- 'class' => SecurityController::class,
- ],
- 'site' => [
- 'class' => SiteController::class,
- ],
+ 'site' => ['class' => SiteController::class],
],
'language' => 'en-US',
'modules' => $modules,
@@ -53,18 +37,7 @@
if (YII_ENV_DEV) {
// configuration adjustments for 'dev' environment
$config['bootstrap'][] = 'debug';
- $config['modules']['debug'] = [
- 'class' => yii\debug\Module::class,
- // uncomment the following to add your IP if you aren't connecting from localhost.
- //'allowedIPs' => ['127.0.0.1', '::1'],
- ];
-
$config['bootstrap'][] = 'gii';
- $config['modules']['gii'] = [
- 'class' => yii\gii\Module::class,
- // uncomment the following to add your IP if you aren't connecting from localhost.
- //'allowedIPs' => ['127.0.0.1', '::1'],
- ];
}
return $config;
diff --git a/config/web/components.php b/config/web/components.php
index de6d2d3..9fe0b61 100644
--- a/config/web/components.php
+++ b/config/web/components.php
@@ -2,17 +2,14 @@
declare(strict_types=1);
-use app\usecase\security\Identity;
use yii\i18n\PhpMessageSource;
-use yii\web\User;
-use yii2\extensions\localeurls\UrlLanguageManager;
/** @phpstan-var string[] $commonComponents */
$commonComponents = require dirname(__DIR__) . '/common/components.php';
$config = [
'assetManager' => [
- 'basePath' => '@public/assets',
+ 'basePath' => '@root/web/assets',
],
'errorHandler' => [
'errorAction' => 'site/404',
@@ -21,8 +18,6 @@
'translations' => [
'app.basic' => [
'class' => PhpMessageSource::class,
- 'basePath' => '@resource/message',
- 'sourceLanguage' => 'en',
],
],
],
@@ -31,23 +26,9 @@
'enableCsrfValidation' => YII_ENV_DEV === false,
],
'urlManager' => [
- 'class' => UrlLanguageManager::class,
- 'languages' => [
- 'de' => 'de-DE',
- 'en' => 'en-US',
- 'es' => 'es-ES',
- 'fr' => 'fr-FR',
- 'pt' => 'pt-BR',
- 'ru' => 'ru-RU',
- 'zh' => 'zh-CN',
- ],
'enablePrettyUrl' => true,
'showScriptName' => false,
],
- 'user' => [
- 'class' => User::class,
- 'identityClass' => Identity::class,
- ],
];
$config += $commonComponents;
diff --git a/config/web/modules.php b/config/web/modules.php
index 0dae23d..f970647 100644
--- a/config/web/modules.php
+++ b/config/web/modules.php
@@ -2,4 +2,17 @@
declare(strict_types=1);
-return [];
+$config = [
+ 'debug' => [
+ 'class' => yii\debug\Module::class,
+ // uncomment the following to add your IP if you aren't connecting from localhost.
+ //'allowedIPs' => ['127.0.0.1', '::1'],
+ ],
+ 'gii' => [
+ 'class' => yii\gii\Module::class,
+ // uncomment the following to add your IP if you aren't connecting from localhost.
+ //'allowedIPs' => ['127.0.0.1', '::1'],
+ ],
+];
+
+return YII_ENV_DEV ? $config : [];
diff --git a/docs/404.png b/docs/404.png
deleted file mode 100644
index 9f7a50b..0000000
Binary files a/docs/404.png and /dev/null differ
diff --git a/docs/about.png b/docs/about.png
deleted file mode 100644
index ff5febe..0000000
Binary files a/docs/about.png and /dev/null differ
diff --git a/docs/configuration.md b/docs/configuration.md
index 2b1a1d6..9a09736 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -82,7 +82,6 @@ Application configuration in `config/console/app.php`.
declare(strict_types=1);
use app\usecase\hello\HelloController;
-use yii\console\controllers\ServeController;
/** @var string[] $components */
$components = require dirname(__DIR__) . '/common/components.php';
@@ -92,21 +91,10 @@ $params = require dirname(__DIR__) . '/params-console.php';
return [
'id' => 'console.basic',
- 'aliases' => [
- '@root' => dirname(__DIR__, 2),
- ],
'basePath' => dirname(__DIR__, 2),
- 'bootstrap' => [
- 'log',
- ],
+ 'bootstrap' => ['log'],
'components' => $components,
- 'controllerMap' => [
- 'hello' => HelloController::class,
- 'serve' => [
- 'class' => ServeController::class,
- 'docroot' => '@app/public',
- ],
- ],
+ 'controllerMap' => ['hello' => HelloController::class],
'params' => $params,
];
```
@@ -120,9 +108,6 @@ Application configuration in `config/web/app.php`.
declare(strict_types=1);
-use app\framework\event\ContactEventHandler;
-use app\usecase\contact\ContactController;
-use app\usecase\security\SecurityController;
use app\usecase\site\SiteController;
/** @phpstan-var string[] $components */
@@ -139,35 +124,30 @@ return [
'id' => 'web.basic',
'aliases' => [
'@root' => $rootDir,
- '@bower' => '@npm',
'@npm' => '@root/node_modules',
- '@public' => '@root/public',
+ '@bower' => '@npm',
'@resource' => '@root/src/framework/resource',
'@runtime' => '@root/runtime',
- '@web' => '/',
],
'basePath' => $rootDir,
- 'bootstrap' => [
- ContactEventHandler::class,
- 'log',
- ],
+ 'bootstrap' => ['log'],
'components' => $components,
'controllerMap' => [
- 'contact' => [
- 'class' => ContactController::class,
- ],
- 'security' => [
- 'class' => SecurityController::class,
- ],
- 'site' => [
- 'class' => SiteController::class,
- ],
+ 'site' => ['class' => SiteController::class],
],
'language' => 'en-US',
'modules' => $modules,
'name' => 'Web application basic',
'params' => $params,
];
+
+if (YII_ENV_DEV) {
+ // configuration adjustments for 'dev' environment
+ $config['bootstrap'][] = 'debug';
+ $config['bootstrap'][] = 'gii';
+}
+
+return $config;
```
Components configuration in `config/web/components.php`.
@@ -177,17 +157,14 @@ Components configuration in `config/web/components.php`.
declare(strict_types=1);
-use app\usecase\security\Identity;
use yii\i18n\PhpMessageSource;
-use yii\web\User;
-use yii2\extensions\localeurls\UrlLanguageManager;
/** @phpstan-var string[] $commonComponents */
$commonComponents = require dirname(__DIR__) . '/common/components.php';
$config = [
'assetManager' => [
- 'basePath' => '@public/assets',
+ 'basePath' => '@root/web/assets',
],
'errorHandler' => [
'errorAction' => 'site/404',
@@ -196,8 +173,6 @@ $config = [
'translations' => [
'app.basic' => [
'class' => PhpMessageSource::class,
- 'basePath' => '@resource/message',
- 'sourceLanguage' => 'en',
],
],
],
@@ -206,29 +181,37 @@ $config = [
'enableCsrfValidation' => YII_ENV_DEV === false,
],
'urlManager' => [
- 'class' => UrlLanguageManager::class,
- 'languages' => [
- 'de' => 'de-DE',
- 'en' => 'en-US',
- 'es' => 'es-ES',
- 'fr' => 'fr-FR',
- 'pt' => 'pt-BR',
- 'ru' => 'ru-RU',
- 'zh' => 'zh-CN',
- ],
'enablePrettyUrl' => true,
'showScriptName' => false,
],
- 'user' => [
- 'class' => User::class,
- 'identityClass' => Identity::class,
- ],
];
$config += $commonComponents;
return $config;
+```
+
+Modules configuration in `config/web/modules.php`.
+
+```php
+ [
+ 'class' => yii\debug\Module::class,
+ // uncomment the following to add your IP if you aren't connecting from localhost.
+ //'allowedIPs' => ['127.0.0.1', '::1'],
+ ],
+ 'gii' => [
+ 'class' => yii\gii\Module::class,
+ // uncomment the following to add your IP if you aren't connecting from localhost.
+ //'allowedIPs' => ['127.0.0.1', '::1'],
+ ],
+];
+return YII_ENV_DEV ? $config : [];
```
## Next steps
diff --git a/docs/contact.png b/docs/contact.png
deleted file mode 100644
index 167648f..0000000
Binary files a/docs/contact.png and /dev/null differ
diff --git a/docs/home.png b/docs/home.png
deleted file mode 100644
index ddc32e2..0000000
Binary files a/docs/home.png and /dev/null differ
diff --git a/docs/images/404-dark.png b/docs/images/404-dark.png
new file mode 100644
index 0000000..3cf66f4
Binary files /dev/null and b/docs/images/404-dark.png differ
diff --git a/docs/images/404.png b/docs/images/404.png
new file mode 100644
index 0000000..45ec140
Binary files /dev/null and b/docs/images/404.png differ
diff --git a/docs/images/home-dark.png b/docs/images/home-dark.png
new file mode 100644
index 0000000..4b32472
Binary files /dev/null and b/docs/images/home-dark.png differ
diff --git a/docs/images/home.png b/docs/images/home.png
new file mode 100644
index 0000000..f98b701
Binary files /dev/null and b/docs/images/home.png differ
diff --git a/docs/installation.md b/docs/installation.md
index e46f7cd..97b82d2 100644
--- a/docs/installation.md
+++ b/docs/installation.md
@@ -56,14 +56,14 @@ composer install
Ensure the following directories are writable by the web server.
```bash
-chmod 775 public/assets runtime tests/_output
+chmod 775 web/assets runtime tests/_output
```
### Web server configuration
#### Apache
-Create `public/.htaccess`.
+Create `web/.htaccess`.
```apache
RewriteEngine on
@@ -80,7 +80,7 @@ Add to your Nginx configuration.
server {
listen 80;
server_name myapp.local;
- root /path/to/myapp/public;
+ root /path/to/myapp/web;
index index.php;
location / {
@@ -106,7 +106,7 @@ For development purposes.
```bash
# Method 1: Using PHP built-in server
-php -S localhost:8080 -t public
+php -S localhost:8080 -t web
# Method 2: Using Yii console command
./yii serve
diff --git a/package.json b/package.json
index e2ece03..1a1da95 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,6 @@
"dependencies": {
"bootstrap": "^5.3.2",
"bootstrap-icons": "^1.10.5",
- "flag-icons": "^7.5.0",
"inputmask": "^5.0.8",
"jquery": "~3.6.4",
"jquery-pjax": "^2.0.1",
diff --git a/src/framework/ApplicationParameters.php b/src/framework/ApplicationParameters.php
index acf0c7f..eedc9ee 100644
--- a/src/framework/ApplicationParameters.php
+++ b/src/framework/ApplicationParameters.php
@@ -4,6 +4,8 @@
namespace app\framework;
+use Yii;
+
/**
* @phpstan-type MenuItem array<
* array{
@@ -16,16 +18,6 @@
*/
final class ApplicationParameters
{
- public static function getMailerSender(): string
- {
- return 'noreply@example.com';
- }
-
- public static function getMailerSenderName(): string
- {
- return 'Web application basic';
- }
-
/**
* @phpstan-return MenuItem
*/
@@ -33,53 +25,8 @@ public static function getMenuIsGuest(): array
{
return [
[
- 'label' => 'Home',
- 'url' => [
- '/site/index',
- ],
- 'order' => 0,
- 'category' => 'app.basic',
- ],
- [
- 'label' => 'About',
- 'url' => [
- '/site/about',
- ],
- 'order' => 1,
- 'category' => 'app.basic',
- ],
- [
- 'label' => 'Contact',
- 'url' => [
- '/contact/index',
- ],
- 'order' => 2,
- 'category' => 'app.basic',
- ],
- [
- 'label' => 'Login',
- 'url' => [
- '/security/login',
- ],
- 'order' => 3,
- ],
- ];
- }
-
- /**
- * @phpstan-return MenuItem
- */
- public static function getMenuIsLogged(): array
- {
- return [
- [
- 'label' => 'Logout',
- 'url' => ['/security/logout'],
- 'linkOptions' => [
- 'class' => 'nav-link',
- 'data-method' => 'post',
- ],
- 'order' => 1,
+ 'label' => Yii::t('app.basic', 'Home'),
+ 'url' => ['/site/index'],
],
];
}
diff --git a/src/framework/asset/AppAsset.php b/src/framework/asset/AppAsset.php
index dc03f20..06b1319 100644
--- a/src/framework/asset/AppAsset.php
+++ b/src/framework/asset/AppAsset.php
@@ -4,10 +4,8 @@
namespace app\framework\asset;
-use yii\bootstrap5\BootstrapAsset;
-use yii\bootstrap5\BootstrapPluginAsset;
-use yii\web\AssetBundle;
-use yii\web\YiiAsset;
+use yii\bootstrap5\{BootstrapAsset, BootstrapPluginAsset};
+use yii\web\{AssetBundle, YiiAsset};
final class AppAsset extends AssetBundle
{
diff --git a/src/framework/asset/LocaleAsset.php b/src/framework/asset/LocaleAsset.php
deleted file mode 100644
index 31b1a89..0000000
--- a/src/framework/asset/LocaleAsset.php
+++ /dev/null
@@ -1,23 +0,0 @@
- [
- 'flag-icons.css',
- 'flags/**/*',
- ],
- ];
-
- public $sourcePath = '@npm/flag-icons/';
-}
diff --git a/src/framework/event/ContactEventHandler.php b/src/framework/event/ContactEventHandler.php
deleted file mode 100644
index c5f9843..0000000
--- a/src/framework/event/ContactEventHandler.php
+++ /dev/null
@@ -1,33 +0,0 @@
-session->setFlash('success', "{$title} {$message}");
- },
- );
- }
-}
diff --git a/src/framework/resource/css/site.css b/src/framework/resource/css/site.css
index fe627e9..4ae43d7 100644
--- a/src/framework/resource/css/site.css
+++ b/src/framework/resource/css/site.css
@@ -25,33 +25,3 @@ html, body {
content: "/\00a0";
padding: 0 5px;
}
-
-[data-bs-theme=light] .contact-title {
- color: var(--bs-body-color);
-}
-
-[data-bs-theme=dark] .contact-title {
- color: var(--bs-light);
-}
-
-[data-bs-theme=light] .contact-subtitle {
- color: var(--bs-body-color);
-}
-
-[data-bs-theme=dark] .contact-subtitle {
- color: var(--bs-light);
-}
-
-[data-bs-theme=dark] #contactform-verifycode-image {
- border: 1px solid rgba(255, 255, 255, 0.1);
- box-shadow: 0 1px 3px rgba(0,0,0,0.3);
- filter: invert(1) hue-rotate(180deg);
-}
-
-[data-bs-theme=dark] .login-info {
- background-color: var(--bs-secondary-bg);
-}
-
-[data-bs-theme=dark] .login-info-user {
- color: var(--bs-white);
-}
diff --git a/src/framework/resource/layout/component/alert.php b/src/framework/resource/layout/component/alert.php
deleted file mode 100644
index 2215455..0000000
--- a/src/framework/resource/layout/component/alert.php
+++ /dev/null
@@ -1,33 +0,0 @@
- 'alert-danger',
- 'dark' => 'alert-dark',
- 'info' => 'alert-info',
- 'light' => 'alert-light',
- 'primary' => 'alert-primary',
- 'secondary' => 'alert-secondary',
- 'success' => 'alert-success',
- 'warning' => 'alert-warning',
-];
-
-$flashes = Yii::$app->session->getAllFlashes();
-
-foreach ($flashes as $type => $message) {
- if (isset($alertTypes[$type])) {
- echo Alert::widget(
- [
- 'body' => $message,
- 'options' => [
- 'class' => $alertTypes[$type],
- ],
- ],
- );
-
- Yii::$app->session->removeFlash($type);
- }
-}
diff --git a/src/framework/resource/layout/component/menu.php b/src/framework/resource/layout/component/menu.php
index d9d49c7..2a0d12e 100644
--- a/src/framework/resource/layout/component/menu.php
+++ b/src/framework/resource/layout/component/menu.php
@@ -3,15 +3,9 @@
declare(strict_types=1);
use app\framework\ApplicationParameters;
-use yii\bootstrap5\Nav;
-use yii\bootstrap5\NavBar;
+use yii\bootstrap5\{Nav, NavBar};
use yii\helpers\Html;
-$menuItems = match (Yii::$app->user->getIsGuest()) {
- false => ApplicationParameters::getMenuIsLogged(),
- default => ApplicationParameters::getMenuIsGuest(),
-};
-
NavBar::begin(
[
'brandLabel' => Html::img(
@@ -31,7 +25,7 @@
echo Nav::widget(
[
- 'items' => $menuItems,
+ 'items' => ApplicationParameters::getMenuIsGuest(),
'options' => [
'class' => 'navbar-nav justify-content-end navbar-collapse',
],
diff --git a/src/framework/resource/layout/component/toggle_language.php b/src/framework/resource/layout/component/toggle_language.php
deleted file mode 100644
index b05fb45..0000000
--- a/src/framework/resource/layout/component/toggle_language.php
+++ /dev/null
@@ -1,70 +0,0 @@
-urlManager->languages;
-
-foreach ($locales as $key => $value) {
- $classes = [
- 'dropdown-item',
- 'd-flex',
- 'align-items-center',
- ];
- $icon = match ($key) {
- 'en' => 'us',
- 'zh' => 'cn',
- default => $key,
- };
-
- if (Yii::$app->language === $value) {
- $classes[] = 'active';
- }
-
- $items[] = Html::a(
- ' ' . Yii::t('app.basic', "site.selector.language.{$key}"),
- Url::current(['language' => $key]),
- [
- 'class' => implode(' ', $classes),
- ],
- );
-}
-?>
-
- = Html::button(
- Svg::widget()
- ->attributes(['height' => '24', 'width' => '24'])
- ->class('w-3 h-3')
- ->filePath(Yii::getAlias('@npm/bootstrap-icons/icons/globe.svg'))
- ->render(),
- [
- 'aria-expanded' => 'true',
- 'aria-label' => 'Toggle language dropdown',
- 'class' => 'btn btn-primary dropdown-toggle d-flex align-items-center text-white show',
- 'data-bs-toggle' => 'dropdown',
- 'title' => 'Select language',
- 'type' => 'button',
- ],
- ) ?>
-
- = Html::ul(
- $items,
- [
- 'class' => 'dropdown-menu dropdown-menu-end shadow',
- 'encode' => false,
- ],
- ) ?>
-
-
diff --git a/src/framework/resource/layout/footer.php b/src/framework/resource/layout/footer.php
index 7f86619..62a9a04 100644
--- a/src/framework/resource/layout/footer.php
+++ b/src/framework/resource/layout/footer.php
@@ -35,7 +35,6 @@
= $this->render('component/footer-icons') ?>
= $this->render('component/toggle_theme') ?>
- = $this->render('component/toggle_language') ?>
diff --git a/src/framework/resource/layout/head.php b/src/framework/resource/layout/head.php
index d56a3f2..948d183 100644
--- a/src/framework/resource/layout/head.php
+++ b/src/framework/resource/layout/head.php
@@ -2,10 +2,10 @@
declare(strict_types=1);
-use yii\{helpers\Html, web\View};
+use yii\helpers\Html;
/**
- * @var View $this
+ * @var yii\web\View $this
*/
?>
diff --git a/src/framework/resource/layout/main.php b/src/framework/resource/layout/main.php
index bdd0851..2682a38 100644
--- a/src/framework/resource/layout/main.php
+++ b/src/framework/resource/layout/main.php
@@ -3,11 +3,10 @@
declare(strict_types=1);
use app\framework\asset\AppAsset;
-use yii\web\View;
/**
* @var string $content
- * @var View $this
+ * @var yii\web\View $this
*/
AppAsset::register($this);
?>
@@ -20,7 +19,6 @@
= $this->render('component/menu') ?>
- = $this->render('component/alert') ?>
= $this->render('component/breadcrumbs') ?>
= $content ?>
diff --git a/src/framework/resource/message/de/app.basic.php b/src/framework/resource/message/de/app.basic.php
deleted file mode 100644
index 527ccbc..0000000
--- a/src/framework/resource/message/de/app.basic.php
+++ /dev/null
@@ -1,54 +0,0 @@
- 'Über uns',
- 'Because the application is in development mode, the email is not sent but saved as a file under.' => 'Da die Anwendung im Entwicklungsmodus ist, wird die E-Mail nicht gesendet, sondern als Datei gespeichert unter.',
- 'Body' => 'Nachrichtentext',
- 'Captcha Code' => 'Captcha-Code',
- 'Contact us' => 'Kontaktiere uns',
- 'Contact' => 'Kontakt',
- 'Email' => 'E-Mail',
- 'Enter Body Here' => 'Hier Nachricht eingeben',
- 'Enter Captcha Code Here' => 'Hier Captcha-Code eingeben',
- 'Enter Email Here' => 'Hier E-Mail eingeben',
- 'Enter Subject Here' => 'Hier Betreff eingeben',
- 'Enter Username Here' => 'Hier Benutzername eingeben',
- 'If you think this is a problem with us, please tell us.' => 'Wenn Sie denken, dass dies ein Problem bei uns ist, informieren Sie uns bitte.',
- 'Index' => 'Startseite',
- 'Name' => 'Name',
- '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.' => 'Beachten Sie, dass Sie, wenn Sie den Yii-Debugger aktivieren, die E-Mail-Nachricht im E-Mail-Panel des Debuggers anzeigen können.',
- 'Oops! Looks like you followed a bad link.' => 'Hoppla! Sie sind einem fehlerhaften Link gefolgt.',
- 'Please configure the
useFileTransport
property of the
mail
application component to be false to enable email sending.' => 'Bitte konfigurieren Sie die Eigenschaft
useFileTransport
des
mail
-Anwendungsbausteins als falsch, um das Versenden von E-Mails zu ermöglichen.',
- 'Please fill out the following form to contact us.' => 'Bitte füllen Sie das folgende Formular aus, um uns zu kontaktieren.',
- 'site.selector.language.de' => 'Deutsch',
- 'site.selector.language.en' => 'Englisch',
- 'site.selector.language.es' => 'Spanisch',
- 'site.selector.language.fr' => 'Französisch',
- 'site.selector.language.pt' => 'Portugiesisch',
- 'site.selector.language.ru' => 'Russisch',
- 'site.selector.language.zh' => 'Chinesisch',
- 'Subject' => 'Betreff',
- 'Thank you for contacting us. We will respond to you as soon as possible.' => 'Vielen Dank für Ihre Kontaktaufnahme. Wir werden uns so schnell wie möglich bei Ihnen melden.',
- 'This is the About page. You may modify the following file to customize its content.' => 'Dies ist die Über-uns-Seite. Sie können die folgende Datei bearbeiten, um ihren Inhalt anzupassen.',
- 'Username' => 'Benutzername',
- 'Web Application' => 'Webanwendung',
-];
diff --git a/src/framework/resource/message/en/app.basic.php b/src/framework/resource/message/en/app.basic.php
deleted file mode 100644
index 3f8ba94..0000000
--- a/src/framework/resource/message/en/app.basic.php
+++ /dev/null
@@ -1,54 +0,0 @@
- '',
- 'Because the application is in development mode, the email is not sent but saved as a file under.' => '',
- 'Body' => '',
- 'Captcha Code' => '',
- 'Contact' => '',
- 'Contact us' => '',
- 'Email' => '',
- 'Enter Body Here' => '',
- 'Enter Captcha Code Here' => '',
- 'Enter Email Here' => '',
- 'Enter Subject Here' => '',
- 'Enter Username Here' => '',
- 'If you think this is a problem with us, please tell us.' => '',
- 'Index' => '',
- 'Name' => '',
- '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.' => '',
- 'Oops! Looks like you followed a bad link.' => '',
- 'Please configure the
useFileTransport
property of the
mail
application component to be false to enable email sending.' => '',
- 'Please fill out the following form to contact us.' => '',
- 'Subject' => '',
- 'Thank you for contacting us. We will respond to you as soon as possible.' => '',
- 'This is the About page. You may modify the following file to customize its content.' => '',
- 'Web Application' => '',
- 'Yii v.22' => '',
- 'site.selector.language.de' => 'German',
- 'site.selector.language.en' => 'English',
- 'site.selector.language.es' => 'Spanish',
- 'site.selector.language.fr' => 'French',
- 'site.selector.language.pt' => 'Portuguese',
- 'site.selector.language.ru' => 'Russian',
- 'site.selector.language.zh' => 'Chinese',
-];
diff --git a/src/framework/resource/message/es/app.basic.php b/src/framework/resource/message/es/app.basic.php
deleted file mode 100644
index c03ab5d..0000000
--- a/src/framework/resource/message/es/app.basic.php
+++ /dev/null
@@ -1,55 +0,0 @@
- 'Acerca de',
- 'Because the application is in development mode, the email is not sent but saved as a file under.' => 'Debido a que la aplicación está en modo de desarrollo, el correo electrónico no se envía, pero se guarda como un archivo en.',
- 'Body' => 'Cuerpo',
- 'Captcha Code' => 'Código Captcha',
- 'Contact us' => 'Contáctanos',
- 'Contact' => 'Contacto',
- 'Email' => 'Correo Electrónico',
- 'Enter Body Here' => 'Ingresa el Cuerpo Aquí',
- 'Enter Captcha Code Here' => 'Ingresa el Código Captcha Aquí',
- 'Enter Email Here' => 'Ingresa el Correo Electrónico Aquí',
- 'Enter Subject Here' => 'Ingresa el Asunto Aquí',
- 'Enter Username Here' => 'Ingresa el Nombre de Usuario Aquí',
- 'If you think this is a problem with us, please tell us.' => 'Si crees que esto es un problema con nosotros, por favor cuéntanos.',
- 'Index' => 'Índice',
- 'Name' => 'Nombre',
- '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.' => 'Ten en cuenta que si habilitas el depurador de Yii, deberías poder ver el mensaje de correo en el panel de correo del depurador.',
- 'Oops! Looks like you followed a bad link.' => '¡Ups! Parece que has seguido un enlace incorrecto.',
- 'Please configure the
useFileTransport
property of the
mail
application component to be false to enable email sending.' => '',
- 'Please configure the
useFileTransport
property of the
mail
application component to be false to enable email sending.' => '@@Por favor configura la propiedad
useFileTransport
del componente de aplicación
mail
en falso para habilitar el envío de correos electrónicos.@@',
- 'Please fill out the following form to contact us.' => 'Por favor completa el siguiente formulario para contactarnos.',
- 'site.selector.language.de' => 'Alemán',
- 'site.selector.language.en' => 'Inglés',
- 'site.selector.language.es' => 'Español',
- 'site.selector.language.fr' => 'Francés',
- 'site.selector.language.pt' => 'Portugués',
- 'site.selector.language.ru' => 'Ruso',
- 'site.selector.language.zh' => 'Chino',
- 'Subject' => 'Asunto',
- 'Thank you for contacting us. We will respond to you as soon as possible.' => 'Gracias por contactarnos. Te responderemos lo antes posible.',
- 'This is the About page. You may modify the following file to customize its content.' => 'Esta es la página de Acerca de. Puedes modificar el siguiente archivo para personalizar su contenido.',
- 'Username' => 'Nombre de Usuario',
- 'Web Application' => 'Aplicación web',
-];
diff --git a/src/framework/resource/message/fr/app.basic.php b/src/framework/resource/message/fr/app.basic.php
deleted file mode 100644
index 96c9f24..0000000
--- a/src/framework/resource/message/fr/app.basic.php
+++ /dev/null
@@ -1,54 +0,0 @@
- 'À propos',
- 'Because the application is in development mode, the email is not sent but saved as a file under.' => 'Parce que l\'application est en mode de développement, l\'e-mail n\'est pas envoyé mais est enregistré en tant que fichier sous.',
- 'Body' => 'Corps',
- 'Captcha Code' => 'Code Captcha',
- 'Contact us' => 'Contactez-nous',
- 'Contact' => 'Contact',
- 'Email' => 'E-mail',
- 'Enter Body Here' => 'Entrez le corps ici',
- 'Enter Captcha Code Here' => 'Entrez le code Captcha ici',
- 'Enter Email Here' => 'Entrez l\'e-mail ici',
- 'Enter Subject Here' => 'Entrez le sujet ici',
- 'Enter Username Here' => 'Entrez le nom d\'utilisateur ici',
- 'If you think this is a problem with us, please tell us.' => 'Si vous pensez que c\'est un problème avec nous, veuillez nous le dire.',
- 'Index' => 'Index',
- 'Name' => 'Nom',
- '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.' => 'Notez que si vous activez le débogueur Yii, vous devriez pouvoir voir le message de courrier dans le panneau de courrier du débogueur.',
- 'Oops! Looks like you followed a bad link.' => 'Oups ! On dirait que vous avez suivi un mauvais lien.',
- 'Please configure the
useFileTransport
property of the
mail
application component to be false to enable email sending.' => 'Veuillez configurer la propriété
useFileTransport
du composant d\'application
mail
en faux pour activer l\'envoi d\'e-mails.',
- 'Please fill out the following form to contact us.' => 'Veuillez remplir le formulaire suivant pour nous contacter.',
- 'site.selector.language.de' => 'Allemand',
- 'site.selector.language.en' => 'Anglais',
- 'site.selector.language.es' => 'Espagnol',
- 'site.selector.language.fr' => 'Français',
- 'site.selector.language.pt' => 'Portugais',
- 'site.selector.language.ru' => 'Russe',
- 'site.selector.language.zh' => 'Chinois',
- 'Subject' => 'Sujet',
- 'Thank you for contacting us. We will respond to you as soon as possible.' => 'Merci de nous avoir contactés. Nous vous répondrons dès que possible.',
- 'This is the About page. You may modify the following file to customize its content.' => 'Il s\'agit de la page À propos. Vous pouvez modifier le fichier suivant pour personnaliser son contenu.',
- 'Username' => 'Nom d\'utilisateur',
- 'Web Application' => 'Application Web',
-];
diff --git a/src/framework/resource/message/pt/app.basic.php b/src/framework/resource/message/pt/app.basic.php
deleted file mode 100644
index 0fe5067..0000000
--- a/src/framework/resource/message/pt/app.basic.php
+++ /dev/null
@@ -1,54 +0,0 @@
- 'Sobre',
- 'Because the application is in development mode, the email is not sent but saved as a file under.' => 'Como a aplicação está em modo de desenvolvimento, o email não é enviado, mas é salvo como um arquivo em.',
- 'Body' => 'Corpo',
- 'Captcha Code' => 'Código Captcha',
- 'Contact us' => 'Contate-nos',
- 'Contact' => 'Contato',
- 'Email' => 'Email',
- 'Enter Body Here' => 'Digite o corpo aqui',
- 'Enter Captcha Code Here' => 'Digite o código Captcha aqui',
- 'Enter Email Here' => 'Digite o email aqui',
- 'Enter Subject Here' => 'Digite o assunto aqui',
- 'Enter Username Here' => 'Digite o nome de usuário aqui',
- 'If you think this is a problem with us, please tell us.' => 'Se você acha que isso é um problema conosco, por favor, nos avise.',
- 'Index' => 'Índice',
- 'Name' => 'Nome',
- '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.' => 'Observe que se você ativar o depurador Yii, deverá ser capaz de ver a mensagem de email no painel de email do depurador.',
- 'Oops! Looks like you followed a bad link.' => 'Ops! Parece que você seguiu um link errado.',
- 'Please configure the
useFileTransport
property of the
mail
application component to be false to enable email sending.' => 'Por favor, configure a propriedade
useFileTransport
do componente de aplicação
mail
para falso para habilitar o envio de emails.',
- 'Please fill out the following form to contact us.' => 'Por favor, preencha o seguinte formulário para entrar em contato conosco.',
- 'site.selector.language.de' => 'Alemão',
- 'site.selector.language.en' => 'Inglês',
- 'site.selector.language.es' => 'Espanhol',
- 'site.selector.language.fr' => 'Francês',
- 'site.selector.language.pt' => 'Português',
- 'site.selector.language.ru' => 'Russo',
- 'site.selector.language.zh' => 'Chinês',
- 'Subject' => 'Assunto',
- 'Thank you for contacting us. We will respond to you as soon as possible.' => 'Obrigado por entrar em contato conosco. Vamos responder o mais rápido possível.',
- 'This is the About page. You may modify the following file to customize its content.' => 'Esta é a página Sobre. Você pode modificar o arquivo a seguir para personalizar seu conteúdo.',
- 'Username' => 'Nome de usuário',
- 'Web Application' => 'Aplicação Web',
-];
diff --git a/src/framework/resource/message/ru/app.basic.php b/src/framework/resource/message/ru/app.basic.php
deleted file mode 100644
index df815ed..0000000
--- a/src/framework/resource/message/ru/app.basic.php
+++ /dev/null
@@ -1,54 +0,0 @@
- 'О нас',
- 'Because the application is in development mode, the email is not sent but saved as a file under.' => 'Поскольку приложение находится в режиме разработки, электронное письмо не отправляется, а сохраняется как файл под именем.',
- 'Body' => 'Сообщение',
- 'Captcha Code' => 'Код Captcha',
- 'Contact us' => 'Свяжитесь с нами',
- 'Contact' => 'Контакт',
- 'Email' => 'Электронная почта',
- 'Enter Body Here' => 'Введите текст сообщения здесь',
- 'Enter Captcha Code Here' => 'Введите код Captcha здесь',
- 'Enter Email Here' => 'Введите адрес электронной почты здесь',
- 'Enter Subject Here' => 'Введите тему здесь',
- 'Enter Username Here' => 'Введите имя пользователя здесь',
- 'If you think this is a problem with us, please tell us.' => 'Если вы считаете, что это проблема с нами, пожалуйста, сообщите нам.',
- 'Index' => 'Главная',
- 'Name' => 'Имя',
- '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.' => 'Обратите внимание, что если вы включите отладчик Yii, вы сможете просматривать почтовое сообщение на панели почты отладчика.',
- 'Oops! Looks like you followed a bad link.' => 'Упс! Похоже, вы перешли по неверной ссылке.',
- 'Please configure the
useFileTransport
property of the
mail
application component to be false to enable email sending.' => 'Пожалуйста, настройте свойство
useFileTransport
компонента приложения
mail
на значение false, чтобы включить отправку электронной почты.',
- 'Please fill out the following form to contact us.' => 'Пожалуйста, заполните следующую форму, чтобы связаться с нами.',
- 'site.selector.language.de' => 'Немецкий',
- 'site.selector.language.en' => 'Английский',
- 'site.selector.language.es' => 'Испанский',
- 'site.selector.language.fr' => 'Французский',
- 'site.selector.language.pt' => 'Португальский',
- 'site.selector.language.ru' => 'Русский',
- 'site.selector.language.zh' => 'Китайский',
- 'Subject' => 'Тема',
- 'Thank you for contacting us. We will respond to you as soon as possible.' => 'Спасибо, что связались с нами. Мы ответим вам как можно скорее.',
- 'This is the About page. You may modify the following file to customize its content.' => 'Это страница "О нас". Вы можете изменить следующий файл, чтобы настроить ее содержание.',
- 'Username' => 'Имя пользователя',
- 'Web Application' => 'Веб-приложение',
-];
diff --git a/src/framework/resource/message/zh/app.basic.php b/src/framework/resource/message/zh/app.basic.php
deleted file mode 100644
index 2902704..0000000
--- a/src/framework/resource/message/zh/app.basic.php
+++ /dev/null
@@ -1,54 +0,0 @@
- '关于',
- 'Because the application is in development mode, the email is not sent but saved as a file under.' => '因为应用程序处于开发模式,电子邮件不会被发送,而会保存为文件。',
- 'Body' => '正文',
- 'Captcha Code' => '验证码',
- 'Contact us' => '联系我们',
- 'Contact' => '联系',
- 'Email' => '电子邮件',
- 'Enter Body Here' => '在此输入正文',
- 'Enter Captcha Code Here' => '在此输入验证码',
- 'Enter Email Here' => '在此输入电子邮件',
- 'Enter Subject Here' => '在此输入主题',
- 'Enter Username Here' => '在此输入用户名',
- 'If you think this is a problem with us, please tell us.' => '如果您认为这是我们的问题,请告诉我们。',
- 'Index' => '主页',
- 'Name' => '姓名',
- '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.' => '请注意,如果您启用Yii调试器,您应该能够在调试器的邮件面板上查看邮件消息。',
- 'Oops! Looks like you followed a bad link.' => '糟糕!看起来您跟随了一个错误的链接。',
- 'Please configure the
useFileTransport
property of the
mail
application component to be false to enable email sending.' => '请配置
mail
应用程序组件的
useFileTransport
属性为false,以启用电子邮件发送。',
- 'Please fill out the following form to contact us.' => '请填写以下表单以与我们联系。',
- 'site.selector.language.de' => '德国的',
- 'site.selector.language.en' => '英语',
- 'site.selector.language.es' => '西班牙语',
- 'site.selector.language.fr' => '法语',
- 'site.selector.language.pt' => '葡萄牙语',
- 'site.selector.language.ru' => '俄语',
- 'site.selector.language.zh' => '中文',
- 'Subject' => '主题',
- 'Thank you for contacting us. We will respond to you as soon as possible.' => '感谢您联系我们。我们将尽快回复您。',
- 'This is the About page. You may modify the following file to customize its content.' => '这是关于页面。您可以修改以下文件来自定义其内容。',
- 'Username' => '用户名',
- 'Web Application' => 'Web应用程序',
-];
diff --git a/src/usecase/contact/ContactController.php b/src/usecase/contact/ContactController.php
deleted file mode 100644
index 2990f0f..0000000
--- a/src/usecase/contact/ContactController.php
+++ /dev/null
@@ -1,53 +0,0 @@
- [
- 'class' => IndexAction::class,
- ],
- 'captcha' => [
- 'class' => CaptchaAction::class,
- 'fixedVerifyCode' => (YII_ENV === 'tests') ? 'testme' : null,
- 'transparent' => true,
- ],
- ],
- parent::actions(),
- );
- }
-
- public function getMailer(): MailerInterface
- {
- return $this->module->get('mailer');
- }
-
- public function getViewPath(): string
- {
- return __DIR__ . '/view';
- }
-
- public function sendEmail(ContactForm $form): bool
- {
- return $this->getMailer()
- ->compose()
- ->setTo($form->email)
- ->setFrom([ApplicationParameters::getMailerSender() => ApplicationParameters::getMailerSenderName()])
- ->setReplyTo([$form->email => $form->name])
- ->setSubject($form->subject)
- ->setTextBody($form->body)
- ->send();
- }
-}
diff --git a/src/usecase/contact/ContactEvent.php b/src/usecase/contact/ContactEvent.php
deleted file mode 100644
index aa97463..0000000
--- a/src/usecase/contact/ContactEvent.php
+++ /dev/null
@@ -1,12 +0,0 @@
- Yii::t('app.basic', 'Name'),
- 'email' => Yii::t('app.basic', 'Email'),
- 'subject' => Yii::t('app.basic', 'Subject'),
- 'body' => Yii::t('app.basic', 'Body'),
- 'verifyCode' => Yii::t('app.basic', 'Captcha Code'),
- ];
- }
-
- public function rules(): array
- {
- 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', CaptchaValidator::class, 'captchaAction' => '/contact/captcha', 'message' => ''],
- ];
- }
-}
diff --git a/src/usecase/contact/IndexAction.php b/src/usecase/contact/IndexAction.php
deleted file mode 100644
index dcf0ce2..0000000
--- a/src/usecase/contact/IndexAction.php
+++ /dev/null
@@ -1,27 +0,0 @@
-
- */
-final class IndexAction extends Action
-{
- public function run(): string
- {
- $form = new ContactForm();
- $post = $this->controller->request->post();
-
- if (is_array($post) && $form->load($post) && $form->validate()) {
- if ($this->controller->sendEmail($form)) {
- $this->trigger(ContactEvent::EVENT_AFTER_SEND, new ContactEvent());
- }
- }
-
- return $this->controller->render('index', ['model' => $form]);
- }
-}
diff --git a/src/usecase/contact/view/index.php b/src/usecase/contact/view/index.php
deleted file mode 100644
index 7651f52..0000000
--- a/src/usecase/contact/view/index.php
+++ /dev/null
@@ -1,219 +0,0 @@
-title = Yii::t('app.basic', 'Contact');
-$this->params['breadcrumbs'] = [$this->title];
-$tabInput = 1;
-?>
-
-
-
-
-
-
- = Yii::t('app.basic', 'Please fill out the following form to contact us.') ?>
-
-
-
-
-
-
-
-
-
- 'contact-form',
- 'layout' => ActiveForm::LAYOUT_FLOATING,
- 'options' => ['class' => 'needs-validation', 'novalidate' => true],
- ],
- ) ?>
-
-
-
-
- = $form->field($model, 'name')->textInput(
- [
- 'autofocus' => true,
- 'class' => 'form-control form-control-lg',
- 'placeholder' => Yii::t(
- 'app.basic',
- 'Your full name',
- ),
- 'required' => true,
- 'tabindex' => $tabInput++,
- ],
- ) ?>
-
-
- = $form->field($model, 'email')->textInput(
- [
- 'class' => 'form-control form-control-lg',
- 'placeholder' => Yii::t(
- 'app.basic',
- 'your.email@example.com',
- ),
- 'required' => true,
- 'tabindex' => $tabInput++,
- ],
- ) ?>
-
-
-
-
-
- = $form->field($model, 'subject')->textInput(
- [
- 'class' => 'form-control form-control-lg',
- 'placeholder' => Yii::t('app.basic', 'What is this about?'),
- 'required' => true,
- 'tabindex' => $tabInput++,
- ],
- ) ?>
-
-
-
-
- = $form->field($model, 'body')->textarea(
- [
- 'class' => 'form-control',
- 'rows' => 6,
- 'placeholder' => Yii::t(
- 'app.basic',
- 'Tell us more about your inquiry...',
- ),
- 'required' => true,
- 'style' => 'resize: vertical; min-height: 150px;',
- 'tabindex' => $tabInput++,
- ],
- ) ?>
-
-
-
-
-
-
Security Verification
-
-
-
- = $form->field(
- $model,
- 'verifyCode',
- [
- 'template' => '{input}{error}',
- 'options' => [
- 'class' => 'mb-2',
- ],
- ],
- )->widget(
- Captcha::class,
- [
- 'captchaAction' => 'contact/captcha',
- 'template' => '
Captcha Code: {image}
{input}',
- 'options' => [
- 'class' => 'form-control form-control-lg text-center',
- 'placeholder' => Yii::t(
- 'app.basic',
- 'Enter the code above',
- ),
- 'required' => true,
- 'tabindex' => $tabInput++,
- ],
- ],
- ) ?>
-
-
-
-
-
-
- = Html::submitButton(
- Yii::t('app.basic', 'Contact us'),
- [
- 'class' => 'btn btn-primary btn-lg py fw-semibold rounded-3',
- 'name' => 'contact-button',
- 'tabindex' => $tabInput++,
- ],
- ) ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
Get in Touch
-
-
-
-
-
Address
-
123 Main Street City, State 12345
-
-
-
-
-
-
-
Phone
-
+1 (555) 123-4567
-
-
-
-
-
-
-
Email
-
contact@example.com
-
-
-
-
Business Hours
-
-
- Monday - Friday
- 9:00 AM to 6:00 PM
-
-
- Saturday
- 10:00 AM to 4:00 PM
-
-
- Sunday
- Closed
-
-
-
-
-
-
-
-
diff --git a/src/usecase/security/Identity.php b/src/usecase/security/Identity.php
deleted file mode 100644
index 3f1e8f0..0000000
--- a/src/usecase/security/Identity.php
+++ /dev/null
@@ -1,91 +0,0 @@
-
- */
- private static array $users = [
- '100' => [
- 'id' => '100',
- 'username' => 'admin',
- 'password' => 'admin',
- 'authKey' => 'test100key',
- 'accessToken' => '100-token',
- ],
- '101' => [
- 'id' => '101',
- 'username' => 'demo',
- 'password' => 'demo',
- 'authKey' => 'test101key',
- 'accessToken' => '101-token',
- ],
- ];
-
- public static function findByUsername(string $username): IdentityInterface|null
- {
- foreach (self::$users as $user) {
- if (strcasecmp($user['username'], $username) === 0) {
- return new self($user);
- }
- }
-
- return null;
- }
-
- public static function findIdentity($id): IdentityInterface|null
- {
- return isset(self::$users[$id]) ? new self(self::$users[$id]) : null;
- }
-
- public static function findIdentityByAccessToken($token, $type = null): IdentityInterface|null
- {
- foreach (self::$users as $user) {
- if ($user['accessToken'] === $token) {
- return new self($user);
- }
- }
-
- return null;
- }
-
- public function getAuthKey(): string
- {
- return $this->authKey;
- }
-
- public function getId(): string
- {
- return $this->id;
- }
-
- public function validateAuthKey($authKey): bool
- {
- return $this->authKey === $authKey;
- }
-
- public function validatePassword(string $password): bool
- {
- return $this->password === $password;
- }
-}
diff --git a/src/usecase/security/LoginAction.php b/src/usecase/security/LoginAction.php
deleted file mode 100644
index 4fee2b9..0000000
--- a/src/usecase/security/LoginAction.php
+++ /dev/null
@@ -1,41 +0,0 @@
-
- */
-final class LoginAction extends Action
-{
- public function run(): string|Response
- {
- if ($this->controller->getUser()->isGuest === false) {
- return $this->controller->goHome();
- }
-
- $form = new LoginForm();
- $post = $this->controller->request->post();
-
- if (is_array($post) && $form->load($post) && $this->login($form)) {
- return $this->controller->goBack();
- }
-
- return $this->controller->render('login', ['model' => $form]);
- }
-
- private function login(LoginForm $form): bool
- {
- $identity = $form->getIdentity();
-
- if ($identity instanceof Identity && $form->validate()) {
- return $this->controller->getUser()->login($identity, $form->rememberMe ? 3600 * 24 * 30 : 0);
- }
-
- return false;
- }
-}
diff --git a/src/usecase/security/LoginForm.php b/src/usecase/security/LoginForm.php
deleted file mode 100644
index 134c827..0000000
--- a/src/usecase/security/LoginForm.php
+++ /dev/null
@@ -1,73 +0,0 @@
-_identity === false) {
- $this->_identity = Identity::findByUsername($this->username);
- }
-
- return $this->_identity;
- }
-
- /**
- * @phpstan-return array
>
- */
- public function rules(): array
- {
- 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
- *
- * @phpstan-param array $params
- */
- public function validatePassword($attribute, $params): void
- {
- if ($this->hasErrors() === false) {
- $identity = $this->getIdentity();
-
- if ($identity instanceof Identity && $identity->validatePassword($this->password) === false) {
- $this->addError($attribute, 'Incorrect username or password.');
- }
- }
- }
-}
diff --git a/src/usecase/security/LogoutAction.php b/src/usecase/security/LogoutAction.php
deleted file mode 100644
index 5067fc8..0000000
--- a/src/usecase/security/LogoutAction.php
+++ /dev/null
@@ -1,21 +0,0 @@
-
- */
-final class LogoutAction extends Action
-{
- public function run(): Response
- {
- $this->controller->getUser()->logout();
-
- return $this->controller->goHome();
- }
-}
diff --git a/src/usecase/security/SecurityController.php b/src/usecase/security/SecurityController.php
deleted file mode 100644
index 05c31a7..0000000
--- a/src/usecase/security/SecurityController.php
+++ /dev/null
@@ -1,40 +0,0 @@
- [
- 'class' => LogoutAction::class,
- ],
- 'login' => [
- 'class' => LoginAction::class,
- ],
- ],
- parent::actions(),
- );
- }
-
- /**
- * @phpstan-return User
- */
- public function getUser(): User
- {
- return $this->module->get('user');
- }
-
- public function getViewPath(): string
- {
- return __DIR__ . '/view';
- }
-}
diff --git a/src/usecase/security/view/login.php b/src/usecase/security/view/login.php
deleted file mode 100644
index 994a205..0000000
--- a/src/usecase/security/view/login.php
+++ /dev/null
@@ -1,121 +0,0 @@
-title = 'Login';
-$this->params['breadcrumbs'] = [$this->title];
-$tabInput = 1;
-?>
-
-
-
-
-
- = Html::encode($this->title) ?>
-
-
- = Yii::t('app.basic', 'Welcome back! Please sign in to your account.') ?>
-
-
-
-
-
-
-
-
- 'login-form',
- 'layout' => ActiveForm::LAYOUT_FLOATING,
- 'options' => ['class' => 'needs-validation', 'novalidate' => true],
- ],
- ) ?>
-
-
-
- = $form->field($model, 'username')->textInput(
- [
- 'autofocus' => true,
- 'class' => 'form-control form-control-lg',
- 'placeholder' => Yii::t('app.basic', 'Enter your username'),
- 'required' => true,
- 'tabindex' => $tabInput++,
- ],
- ) ?>
-
-
-
-
- = $form->field($model, 'password')->passwordInput(
- [
- 'class' => 'form-control form-control-lg',
- 'placeholder' => Yii::t('app.basic', 'Enter your password'),
- 'required' => true,
- 'tabindex' => $tabInput++,
- ],
- ) ?>
-
-
-
-
-
- = $form->field($model, 'rememberMe')->checkbox(
- [
- 'labelOptions' => [
- 'class' => 'form-check-label fw-medium text-body',
- ],
- 'options' => [
- 'class' => 'form-check-input',
- ],
- ],
- ) ?>
-
-
-
-
-
- = Html::submitButton(
- Yii::t('app.basic', 'Sign In'),
- [
- 'class' => 'btn btn-primary btn-lg py-3 fw-semibold rounded-3',
- 'name' => 'login-button',
- ],
- ) ?>
-
-
-
-
-
-
-
Demo Credentials
-
-
-
-
Admin Access
-
admin / admin
-
-
-
-
-
Demo Access
-
demo / demo
-
-
-
-
- To modify credentials, check = Identity::class ?>
-
-
-
-
-
-
-
diff --git a/src/usecase/site/AboutAction.php b/src/usecase/site/AboutAction.php
deleted file mode 100644
index 44505bb..0000000
--- a/src/usecase/site/AboutAction.php
+++ /dev/null
@@ -1,18 +0,0 @@
-
- */
-final class AboutAction extends Action
-{
- public function run(): string
- {
- return $this->controller->render('about');
- }
-}
diff --git a/src/usecase/site/SiteController.php b/src/usecase/site/SiteController.php
index 806911c..f63c45d 100644
--- a/src/usecase/site/SiteController.php
+++ b/src/usecase/site/SiteController.php
@@ -19,12 +19,7 @@ public function actions(): array
{
return ArrayHelper::merge(
[
- '404' => [
- 'class' => ErrorAction::class,
- ],
- 'about' => [
- 'class' => AboutAction::class,
- ],
+ '404' => ['class' => ErrorAction::class],
],
parent::actions(),
);
diff --git a/src/usecase/site/view/404.php b/src/usecase/site/view/404.php
index 5d379c3..37025db 100644
--- a/src/usecase/site/view/404.php
+++ b/src/usecase/site/view/404.php
@@ -9,7 +9,7 @@
* @var string $name
* @var View $this
*/
-$this->title = $name;
+$this->title = Yii::t('app.basic', $name);
?>
diff --git a/src/usecase/site/view/about.php b/src/usecase/site/view/about.php
deleted file mode 100644
index 2ba2595..0000000
--- a/src/usecase/site/view/about.php
+++ /dev/null
@@ -1,15 +0,0 @@
-title = Yii::t('app.basic', 'About');
-$this->params['breadcrumbs'] = [$this->title];
-?>
-
-
= Html::encode($this->title) ?>
-
= Yii::t('app.basic', 'This is the About page. You may modify the following file to customize its content.') ?>
-
= __FILE__ ?>
-
diff --git a/src/usecase/site/view/index.php b/src/usecase/site/view/index.php
index b955590..237e7df 100644
--- a/src/usecase/site/view/index.php
+++ b/src/usecase/site/view/index.php
@@ -6,7 +6,7 @@
use yii\web\View;
/** @var View $this */
-$this->title = Yii::t('app.basic', 'Index');
+$this->title = Yii::t('app.basic', 'Home');
?>
= Yii::t('app.basic', 'Web Application') ?>
diff --git a/tests/Acceptance/AboutCest.php b/tests/Acceptance/AboutCest.php
deleted file mode 100644
index 353da36..0000000
--- a/tests/Acceptance/AboutCest.php
+++ /dev/null
@@ -1,22 +0,0 @@
-amGoingTo('navigate to the About page.');
- $I->amOnPage('site/about');
-
- $I->wantTo('ensure that About page works.');
-
- $I->expectTo('see page index.');
- $I->see('About');
- $I->see('This is the About page.');
- }
-}
diff --git a/tests/Acceptance/ContactCest.php b/tests/Acceptance/ContactCest.php
deleted file mode 100644
index 617693a..0000000
--- a/tests/Acceptance/ContactCest.php
+++ /dev/null
@@ -1,22 +0,0 @@
-amGoingTo('navigate to the Contact page.');
- $I->amOnPage('contact/index');
-
- $I->wantTo('ensure that Contact page works.');
-
- $I->expectTo('see page index.');
- $I->see('Contact');
- $I->see('Please fill out the following form to contact us.');
- }
-}
diff --git a/tests/Acceptance/SiteCest.php b/tests/Acceptance/SiteCest.php
index 95bf6ff..d975c4e 100644
--- a/tests/Acceptance/SiteCest.php
+++ b/tests/Acceptance/SiteCest.php
@@ -17,6 +17,5 @@ public function homePage(AcceptanceTester $I): void
$I->expectTo('see page index.');
$I->see('Web Application');
- $I->see('English');
}
}
diff --git a/tests/Functional/ContactCest.php b/tests/Functional/ContactCest.php
deleted file mode 100644
index 02e92df..0000000
--- a/tests/Functional/ContactCest.php
+++ /dev/null
@@ -1,63 +0,0 @@
-amGoingTo('navigate to the Contact page.');
- $I->amOnRoute('contact/index');
- }
-
- public function contactFormSubmitFormEmailWrongData(FunctionalTester $I): void
- {
- $I->amGoingTo('contact form submit form with email wrong.');
- $I->submitForm('#contact-form', [
- 'ContactForm[name]' => 'tester',
- 'ContactForm[email]' => 'tester.email',
- 'ContactForm[subject]' => 'test subject',
- 'ContactForm[body]' => 'test content',
- 'ContactForm[verifyCode]' => 'testme',
- ]);
-
- $I->expectTo('Email is not a valid email address');
- $I->dontSee('Name cannot be blank');
- $I->see('Email is not a valid email address.');
- $I->dontSee('Subject cannot be blank');
- $I->dontSee('Body cannot be blank');
- $I->dontSee('The verification code is incorrect');
- }
-
- public function contactFormSubmitFormEmptyData(FunctionalTester $I): void
- {
- $I->amGoingTo('contact form submit form with empty data.');
- $I->submitForm('#contact-form', []);
-
- $I->expectTo('see validations errors.');
- $I->see('Name cannot be blank.');
- $I->see('Email cannot be blank.');
- $I->see('Subject cannot be blank.');
- $I->see('Body cannot be blank.');
- }
-
- public function contactFormSubmitFormSuccessData(FunctionalTester $I): void
- {
- $I->amGoingTo('contact form submit form with success data.');
- $I->submitForm('#contact-form', [
- 'ContactForm[name]' => 'tester',
- 'ContactForm[email]' => 'tester@example.com',
- 'ContactForm[subject]' => 'test subject',
- 'ContactForm[body]' => 'test content',
- 'ContactForm[verifyCode]' => 'testme',
- ]);
-
- $I->expectTo('success.');
- $I->see('Message sent successfully!.');
- $I->see('Thank you for contacting us. We will respond to you as soon as possible.');
- }
-}
diff --git a/tests/Functional/SiteCest.php b/tests/Functional/SiteCest.php
index 39dc2d8..b4e0689 100644
--- a/tests/Functional/SiteCest.php
+++ b/tests/Functional/SiteCest.php
@@ -17,9 +17,8 @@ public function homePage(FunctionalTester $I): void
$I->seeResponseCodeIs(200);
$I->expectTo('see page index.');
- $I->seeInTitle('Index');
+ $I->seeInTitle('Home');
$I->seeElement('body');
$I->see('Web Application', 'h1');
- $I->see('English');
}
}
diff --git a/tests/Unit/ContactControllerTest.php b/tests/Unit/ContactControllerTest.php
deleted file mode 100644
index 89670c5..0000000
--- a/tests/Unit/ContactControllerTest.php
+++ /dev/null
@@ -1,54 +0,0 @@
-attributes = [
- 'name' => 'Tester',
- 'email' => 'tester@example.com',
- 'subject' => 'very important letter subject',
- 'body' => 'body of current message',
- 'verifyCode' => 'testme',
- ];
-
- verify($controller->sendEmail($form))->notEmpty();
-
- self::assertNotNull($this->tester, 'Yii2 module is not initialized');
-
- $this->tester->seeEmailIsSent();
- $emailMessage = $this->tester->grabLastSentEmail();
-
- assert(
- $emailMessage instanceof MessageInterface,
- 'Last sent email should be an instance of \'MessageInterface\'',
- );
-
- verify($emailMessage->getTo())->arrayHasKey('tester@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/IdentityTest.php b/tests/Unit/IdentityTest.php
deleted file mode 100644
index 6be84c5..0000000
--- a/tests/Unit/IdentityTest.php
+++ /dev/null
@@ -1,95 +0,0 @@
-getId(), "User ID for access token '100-token' should be '100'.");
- self::assertSame('admin', $user->username, "Username property should be 'admin'.");
- }
-
- public function testFindByAccessTokenReturnsNullForInvalidToken(): void
- {
- self::assertNull(
- Identity::findIdentityByAccessToken('invalid-token'),
- "Expected 'null' when finding a user by an invalid access token.",
- );
- }
-
- public function testFindByUsernameReturnsIdentity(): void
- {
- $user = Identity::findByUsername('admin');
-
- self::assertInstanceOf(Identity::class, $user, "Expected an instance of 'Identity' for username 'admin'.");
- self::assertSame('100', $user->getId(), "User ID for 'admin' should be '100'.");
- self::assertSame('admin', $user->username, "Username property should be 'admin'.");
- }
-
- public function testFindByUsernameReturnsNullForNonexistentUser(): void
- {
- self::assertNull(
- Identity::findByUsername('nonexistent'),
- "Expected 'null' when finding a user by a 'nonexistent' username.",
- );
- }
-
- public function testValidateAuthKeyReturnsTrueForCorrectAuthKey(): void
- {
- $user = Identity::findByUsername('admin');
-
- self::assertInstanceOf(
- Identity::class,
- $user,
- "Expected an instance of 'Identity' for username 'admin'.",
- );
- self::assertTrue(
- $user->validateAuthKey('test100key'),
- 'Expected auth key validation to return `true` for correct auth key.',
- );
- }
-
- public function testValidatePasswordReturnsTrueForCorrectPassword(): void
- {
- $user = Identity::findByUsername('admin');
-
- self::assertInstanceOf(
- Identity::class,
- $user,
- "Expected an instance of 'Identity' for username 'admin'.",
- );
- self::assertTrue(
- $user->validatePassword('admin'),
- 'Expected password validation to return `true` for correct password.',
- );
- }
-}
diff --git a/tests/Unit/MenuTest.php b/tests/Unit/MenuTest.php
deleted file mode 100644
index 9f5a0f2..0000000
--- a/tests/Unit/MenuTest.php
+++ /dev/null
@@ -1,53 +0,0 @@
-user->login($identity);
-
- self::assertStringContainsString(
- '
Logout ',
- $view->render('@resource/layout/component/menu.php'),
- 'Failed asserting that the logout link is rendered for a logged-in user.',
- );
- }
-}
diff --git a/tests/_envs/php-builtin.yml b/tests/_envs/php-builtin.yml
index 929ab08..ce9c804 100644
--- a/tests/_envs/php-builtin.yml
+++ b/tests/_envs/php-builtin.yml
@@ -1,7 +1,7 @@
extensions:
enabled:
- Codeception\Extension\RunProcess:
- 0: php -d variables_order=EGPCS -S localhost:8085 -t public
+ 0: php -d variables_order=EGPCS -S localhost:8085 -t web
sleep: 1
modules:
config:
diff --git a/public/.htaccess b/web/.htaccess
similarity index 100%
rename from public/.htaccess
rename to web/.htaccess
diff --git a/public/assets/.gitignore b/web/assets/.gitignore
similarity index 100%
rename from public/assets/.gitignore
rename to web/assets/.gitignore
diff --git a/public/favicon.ico b/web/favicon.ico
similarity index 100%
rename from public/favicon.ico
rename to web/favicon.ico
diff --git a/public/image/yii.svg b/web/image/yii.svg
similarity index 100%
rename from public/image/yii.svg
rename to web/image/yii.svg
diff --git a/public/image/yiiframework.svg b/web/image/yiiframework.svg
similarity index 100%
rename from public/image/yiiframework.svg
rename to web/image/yiiframework.svg
diff --git a/public/index.php b/web/index.php
similarity index 64%
rename from public/index.php
rename to web/index.php
index e8074db..7d8b560 100644
--- a/public/index.php
+++ b/web/index.php
@@ -2,13 +2,17 @@
declare(strict_types=1);
-require_once __DIR__ . '/../vendor/autoload.php';
-require_once __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
+require_once dirname(__DIR__) . '/vendor/autoload.php';
// Load environment variables from .env file
$dotenv = Dotenv\Dotenv::createImmutable(dirname(__DIR__));
$dotenv->safeLoad();
+define('YII_DEBUG', $_ENV['YII_DEBUG'] ?? false);
+define('YII_ENV', $_ENV['YII_ENV'] ?? 'prod');
+
+require_once dirname(__DIR__) . '/vendor/yiisoft/yii2/Yii.php';
+
if (getenv('YII_C3')) {
$c3 = dirname(__DIR__) . '/c3.php';
diff --git a/public/robots.txt b/web/robots.txt
similarity index 100%
rename from public/robots.txt
rename to web/robots.txt