diff --git a/README.md b/README.md index 31a1dc1..2a4074f 100644 --- a/README.md +++ b/README.md @@ -40,13 +40,13 @@ Web Application Basic of Yii Version 2. =8.2", "php-forge/foxy": "^0.1", - "sjaakp/yii2-icon": "^1.0", "ui-awesome/html": "^0.3", "ui-awesome/html-component-bootstrap5": "^1.0@dev", - "ui-awesome/html-core":"^0.1", - "ui-awesome/html-helper":"^0.2", "ui-awesome/html-svg":"^0.2", "yii2-extensions/localeurls": "dev-main", "yiisoft/config": "^1.4", @@ -45,12 +42,12 @@ }, "autoload": { "psr-4": { - "App\\": "src/" + "app\\": "src/" } }, "autoload-dev": { "psr-4": { - "App\\Tests\\": "tests/" + "app\\tests\\": "tests/" } }, "extra": { diff --git a/config/params-console.php b/config/params-console.php index c92620a..0e6983a 100644 --- a/config/params-console.php +++ b/config/params-console.php @@ -2,7 +2,7 @@ declare(strict_types=1); -use App\UseCase\Hello\HelloController; +use app\usecase\hello\HelloController; use yii\console\controllers\ServeController; $rootDir = dirname(__DIR__); diff --git a/config/params-web.php b/config/params-web.php index 6befc1c..7cfe514 100644 --- a/config/params-web.php +++ b/config/params-web.php @@ -2,8 +2,8 @@ declare(strict_types=1); -use App\UseCase\Contact\ContactController; -use App\UseCase\Site\SiteController; +use app\usecase\contact\ContactController; +use app\usecase\site\SiteController; return [ // web application settings shared @@ -59,7 +59,6 @@ ], ], 'app.menu.islogged' => [], - 'icons' => '@npm/@fortawesome/fontawesome-free/svgs/{family}/{name}.svg', ], 'web.request.cookieValidationKey' => 'your-cookie-validation-key', 'web.request.enableCsrfValidation' => true, diff --git a/config/params.php b/config/params.php index 94b80d7..d8ffb63 100644 --- a/config/params.php +++ b/config/params.php @@ -7,7 +7,7 @@ return [ 'common.aliases' => [ '@app' => $rootDir, - '@resource' => '@app/src/Framework/resource', + '@resource' => '@app/src/framework/resource', ], 'common.bootstrap' => ['log'], 'common.log.levels' => ['error', 'warning', 'info'], diff --git a/config/web/bootstrap.php b/config/web/bootstrap.php index a63a611..09ffbac 100644 --- a/config/web/bootstrap.php +++ b/config/web/bootstrap.php @@ -2,7 +2,7 @@ declare(strict_types=1); -use App\Framework\EventHandler\ContactEventHandler; +use app\framework\event\ContactEventHandler; return [ 'bootstrap' => [ diff --git a/ecs.php b/ecs.php index dc1fcae..2b9a33f 100644 --- a/ecs.php +++ b/ecs.php @@ -54,4 +54,10 @@ SingleQuoteFixer::class, ] ) - ->withSkip(['*/src/UseCase/Contact/view/*', '*/src/UseCase/Site/view/*']); + ->withSkip( + [ + '*/src/framework/resource/layout/*', + '*/src/usecase/contact/view/*', + '*/src/usecase/site/view/*', + ], + ); diff --git a/src/Framework/resource/layout/component/footer-icons.php b/src/Framework/resource/layout/component/footer-icons.php deleted file mode 100644 index 609c74e..0000000 --- a/src/Framework/resource/layout/component/footer-icons.php +++ /dev/null @@ -1,66 +0,0 @@ - ['d-none d-sm-block d-md-block d-lg-block d-xl-block text-muted hover:text-dark text-decoration-none ms-3'], - 'rel()' => ['noopener'], - 'target()' => ['_blank'], -]; - -$svgDefinitions = [ - 'fill()' => ['currentColor'], - 'height()' => ['32'], -]; - -// Github icon -echo A::widget($linkIconDefinitions) - ->class('md:block hidden') - ->content( - Svg::widget($svgDefinitions) - ->filePath(Yii::getAlias('@npm/@fortawesome/fontawesome-free/svgs/brands/github.svg')), - ) - ->href('https://github.com/yiisoft') - ->title('GitHub'); - -// Slack icon -echo A::widget($linkIconDefinitions) - ->class('md:block hidden') - ->content( - Svg::widget($svgDefinitions) - ->filePath(Yii::getAlias('@npm/@fortawesome/fontawesome-free/svgs/brands/slack.svg')), - ) - ->href( - 'https://join.slack.com/t/yii/shared_invite/enQtMzQ4MDExMDcyNTk2LTc0NDQ2ZTZhNjkzZDgwYjE4YjZlNGQxZjFmZDBjZTU3NjViMDE4ZTMxNDRkZjVlNmM1ZTA1ODVmZGUwY2U3NDA', - ) - ->title('Slack'); - -// Facebook icon -echo A::widget($linkIconDefinitions) - ->class('md:block hidden') - ->content( - Svg::widget($svgDefinitions) - ->filePath(Yii::getAlias('@npm/@fortawesome/fontawesome-free/svgs/brands/facebook.svg')), - ) - ->href('https://www.facebook.com/groups/yiitalk/') - ->title('Facebook'); - -// Twitter icon -echo A::widget($linkIconDefinitions) - ->content( - Svg::widget($svgDefinitions) - ->filePath(Yii::getAlias('@npm/@fortawesome/fontawesome-free/svgs/brands/twitter.svg')), - ) - ->href('https://twitter.com/yiiframework') - ->title('Twitter'); - -// Telegram icon -echo A::widget($linkIconDefinitions) - ->content( - Svg::widget($svgDefinitions) - ->filePath(Yii::getAlias('@npm/@fortawesome/fontawesome-free/svgs/brands/telegram.svg')), - ) - ->href('https://t.me/yii_framework_in_english') - ->title('Telegram'); 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 cea71bd..0000000 --- a/src/Framework/resource/layout/component/toggle_language.php +++ /dev/null @@ -1,37 +0,0 @@ -params['app.localeurls.languages'] ?? []; - -foreach ($locales as $key => $value) { - $icon = match ($key) { - 'en' => 'us', - 'zh' => 'cn', - default => $key, - }; - - if (Yii::$app->language === $value) { - $languageLabel = "site.selector.language.$key"; - } - - $items[] = Item::widget() - ->iconClass('fi fi-' . $icon . ' fis me-2') - ->label(Yii::t('app.basic', "site.selector.language.$key")) - ->link(Url::current(['language' => $key])) - ->active(Yii::$app->language === $value); -} - -echo Dropdown::widget()->cookbook('language')->items(...$items); diff --git a/src/Framework/resource/layout/footer.php b/src/Framework/resource/layout/footer.php deleted file mode 100644 index 93d9b0a..0000000 --- a/src/Framework/resource/layout/footer.php +++ /dev/null @@ -1,46 +0,0 @@ -class('container mt-auto') - ->content( - Footer::widget() - ->class('d-flex justify-content-between align-items-center py-3 my-4 border-top border-secondary-subtle') - ->content( - Div::widget()->class('col-md-4') - ->content( - A::widget() - ->ariaLabel('Yii Framework') - ->class('mb-3 mb-md-0 text-body-secondary text-decoration-none lh-1') - ->content( - Span::widget() - ->class('mb-3 mb-md-0 text-body-secondary') - ->content('©', date('Y'), ' YiiFramework™.'), - ) - ->href('https://www.yiiframework.com/') - ->title('Yii Framework'), - ), - Div::widget() - ->class('col-md-4 justify-content-end d-flex align-items-center') - ->content( - $this->render('component/footer-icons'), - Toggle::Widget()->cookbook('selector-theme')->id('theme-toggle'), - $this->render('component/toggle_language'), - ), - ), - ); diff --git a/src/Framework/resource/layout/head.php b/src/Framework/resource/layout/head.php deleted file mode 100644 index cd8f701..0000000 --- a/src/Framework/resource/layout/head.php +++ /dev/null @@ -1,18 +0,0 @@ - -begin() ?> - charset(Yii::$app->charset) ?> - content('width=device-width, initial-scale=1')->name('viewport') ?> - - content(Html::encode($this->title)) ?> - head() ?> - -beginPage() ?> - - attributes(['lang' => Yii::$app->language, 'data-bs-theme' => 'auto'])->begin() ?> - render('head') ?> - beginBody() ?> - class('d-flex')->begin() ?> - class('cover-container d-flex w-100 h-100 mx-auto flex-column')->begin() ?> - class('mb-auto')->begin() ?> - render('component/menu') ?> - render('component/alert') ?> - $this->params['breadcrumbs'] ?? [], - ], - ) ?> - - - render('footer') ?> - - - - endBody() ?> - -endPage(); diff --git a/src/UseCase/Contact/view/index.php b/src/UseCase/Contact/view/index.php deleted file mode 100644 index 51eed69..0000000 --- a/src/UseCase/Contact/view/index.php +++ /dev/null @@ -1,135 +0,0 @@ -title = $this->title = Yii::t('app.basic', 'Contact'); -$tabInput = 1; -?> -class('container mt-3')->begin() ?> - class('row align-items-center justify-content-center')->begin() ?> - class('col-md-5 col-sm-12')->begin() ?> - class('bg-body-tertiary shadow border-0 rounded border-light p-4 p-lg-5 w-100 fmxw-500') - ->begin() - ?> - content(Encode::content($this->title))->class('fw-bold')->tagName('h1') ?> - content(Yii::t('app.basic', 'Please fill out the following form to contact us.')) ?> - class('mb-3') ?> - 'contact-form', - 'layout' => ActiveForm::LAYOUT_FLOATING, - ] - ) ?> - field($model, 'name') - ->textInput( - [ - 'autofocus' => true, - 'oninvalid' => 'this.setCustomValidity("' . Yii::t('app.basic', 'Enter Username Here') .'")', - 'required' => true, - 'tabindex' => $tabInput++, - ] - ) - ?> - field($model, 'email') - ->textInput( - [ - 'oninvalid' => 'this.setCustomValidity("' . Yii::t('app.basic', 'Enter Email Here') . '")', - 'required' => true, - 'tabindex' => $tabInput++, - ] - ) - ?> - field($model, 'subject') - ->textInput( - [ - 'oninvalid' => 'this.setCustomValidity("' . Yii::t('app.basic', 'Enter Subject Here').'")', - 'required' => true, - 'tabindex' => $tabInput++, - ] - ) - ?> - field($model, 'body') - ->textarea( - [ - 'oninvalid' => 'this.setCustomValidity("' . Yii::t('app.basic', 'Enter Body Here') . '")', - 'required' => true, - 'style' => 'height: 100px', - 'tabindex' => $tabInput++, - ] - ) - ?> - field($model, 'verifyCode', ['labelOptions' => ['id' => 'verifyCode']]) - ->widget( - Captcha::class, - [ - 'captchaAction' => 'contact/captcha', - 'template' => '{input}
' . '' . Yii::t('app.basic', 'Captcha Code') . ': ' . '' . '{image}
', - 'options' => [ - 'class' => 'form-control', - 'oninvalid' => 'this.setCustomValidity("' . Yii::t('app.basic', 'Enter Captcha Code Here') . '")', - 'required' => true, - 'tabindex' => $tabInput++, - ], - ] - ) - ?> - class('d-grid gap-2') - ->content( - Submit::widget() - ->class('btn btn-lg btn-primary btn-block') - ->name('contact-button') - ->tabIndex($tabInput++) - ->value(Yii::t('app.basic', 'Contact us')) - ) - ?> - - - - - class('text-center mt-5')->begin() ?> - hasFlash('contactFormSubmitted')) : ?> - - class('text-center')->begin() ?> - -
-
- useFileTransport) : ?> - -
- ' . Yii::getAlias($mailer->fileTransportPath) . '' ?> -
-
- useFileTransport property of the mail application component to be false to enable email sending.' - ) ?> - - - - -title = $name; - -echo Div::widget() - ->class('d-flex flex-column align-items-center justify-center') - ->content( - Div::widget() - ->class('text-center mb-3') - ->content( - Img::widget() - ->alt('404') - ->class('img-fluid mb-4') - ->src( - 'https://raw.githubusercontent.com/yii-tools/.github/61bbcb1b1f777740cce4200f95ae4bc0aa4350a8/images/app/404.svg', - ) - ), - Div::widget() - ->class('text-center mb-3') - ->content( - H::widget()->class('mb-4')->content(Encode::content($this->title))->tagName('h1'), - H::widget() - ->content( - Encode::content(Yii::t('app.basic', 'Oops! Looks like you followed a bad link.')) - ) - ->tagName('h6'), - H::widget() - ->content( - Encode::content(Yii::t('app.basic', 'If you think this is a problem with us, please tell us.')) - ) - ->tagName('h6'), - ), - ); diff --git a/src/UseCase/Site/view/about.php b/src/UseCase/Site/view/about.php deleted file mode 100644 index d9a8812..0000000 --- a/src/UseCase/Site/view/about.php +++ /dev/null @@ -1,23 +0,0 @@ -title = Yii::t('app.basic', 'About'); - -echo Div::widget() - ->class('text-center') - ->content( - H::widget()->content(Encode::content($this->title))->class('mb-40 display-4 fw-bold')->tagName('h1'), - P::widget() - ->content( - Yii::t( - 'app.basic', - 'This is the About page. You may modify the following file to customize its content.', - ), - ), - HTMLBuilder::createTag('code', __FILE__), - ); diff --git a/src/UseCase/Site/view/index.php b/src/UseCase/Site/view/index.php deleted file mode 100644 index 70065fc..0000000 --- a/src/UseCase/Site/view/index.php +++ /dev/null @@ -1,21 +0,0 @@ -title = Yii::t('app.basic', 'Index'); - -echo Div::widget() - ->class('jumbotron jumbotron-fluid text-center') - ->content( - H::widget() - ->class('display-2 fw-bold') - ->content(Encode::content(Yii::t('app.basic', 'Web Application'))) - ->tagName('h1'), - P::widget() - ->class('lead fw-bold') - ->content(Encode::content(Yii::t('app.basic', 'Yii v.22'))), - ); diff --git a/src/Framework/Asset/AppAsset.php b/src/framework/asset/AppAsset.php similarity index 66% rename from src/Framework/Asset/AppAsset.php rename to src/framework/asset/AppAsset.php index 1040770..587a559 100644 --- a/src/Framework/Asset/AppAsset.php +++ b/src/framework/asset/AppAsset.php @@ -2,16 +2,11 @@ declare(strict_types=1); -namespace App\Framework\Asset; +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}; -/** - * Asset bundle for the web application. - **/ final class AppAsset extends AssetBundle { public $sourcePath = __DIR__ . '/../resource/'; diff --git a/src/Framework/Asset/LocaleAsset.php b/src/framework/asset/LocaleAsset.php similarity index 82% rename from src/Framework/Asset/LocaleAsset.php rename to src/framework/asset/LocaleAsset.php index 2bd6b3a..54b40ea 100644 --- a/src/Framework/Asset/LocaleAsset.php +++ b/src/framework/asset/LocaleAsset.php @@ -2,13 +2,10 @@ declare(strict_types=1); -namespace App\Framework\Asset; +namespace app\framework\asset; use yii\web\AssetBundle; -/** - * Asset bundle for locale urls. - **/ final class LocaleAsset extends AssetBundle { public $sourcePath = '@npm/flag-icons/'; diff --git a/src/Framework/Asset/ToggleThemeAsset.php b/src/framework/asset/ToggleThemeAsset.php similarity index 75% rename from src/Framework/Asset/ToggleThemeAsset.php rename to src/framework/asset/ToggleThemeAsset.php index 53c4737..c950609 100644 --- a/src/Framework/Asset/ToggleThemeAsset.php +++ b/src/framework/asset/ToggleThemeAsset.php @@ -2,15 +2,11 @@ declare(strict_types=1); -namespace App\Framework\Asset; +namespace app\framework\asset; use yii\bootstrap5\BootstrapAsset; -use yii\web\AssetBundle; -use yii\web\View; +use yii\web\{AssetBundle, View}; -/** - * Asset bundle for the toggle theme. - **/ final class ToggleThemeAsset extends AssetBundle { public $sourcePath = __DIR__ . '/../resource/js/'; diff --git a/src/Framework/EventHandler/ContactEventHandler.php b/src/framework/event/ContactEventHandler.php similarity index 79% rename from src/Framework/EventHandler/ContactEventHandler.php rename to src/framework/event/ContactEventHandler.php index edcec03..9a3085d 100644 --- a/src/Framework/EventHandler/ContactEventHandler.php +++ b/src/framework/event/ContactEventHandler.php @@ -2,13 +2,11 @@ declare(strict_types=1); -namespace App\Framework\EventHandler; +namespace app\framework\event; -use App\UseCase\Contact\ContactEvent; -use App\UseCase\Contact\Index\IndexAction; +use app\usecase\contact\{ContactEvent, IndexAction}; use Yii; -use yii\base\BootstrapInterface; -use yii\base\Event; +use yii\base\{BootstrapInterface, Event}; use yii\web\Application; final class ContactEventHandler implements BootstrapInterface diff --git a/src/Framework/resource/css/site.css b/src/framework/resource/css/site.css similarity index 100% rename from src/Framework/resource/css/site.css rename to src/framework/resource/css/site.css diff --git a/src/Framework/resource/js/toggle-theme.js b/src/framework/resource/js/toggle-theme.js similarity index 100% rename from src/Framework/resource/js/toggle-theme.js rename to src/framework/resource/js/toggle-theme.js diff --git a/src/Framework/resource/layout/component/alert.php b/src/framework/resource/layout/component/alert.php similarity index 74% rename from src/Framework/resource/layout/component/alert.php rename to src/framework/resource/layout/component/alert.php index 422038d..cca6dca 100644 --- a/src/Framework/resource/layout/component/alert.php +++ b/src/framework/resource/layout/component/alert.php @@ -2,7 +2,7 @@ declare(strict_types=1); -use UIAwesome\Html\{Component\Bootstrap5\Alert, Group\Div}; +use UIAwesome\Html\{Component\Bootstrap5\Alert}; $session = Yii::$app->getSession(); $flashMessages = $session->getAllFlashes(); @@ -13,5 +13,7 @@ $html[] = Alert::widget()->cookbook('dismissible', $type)->content($message); } } - -echo Div::widget()->id('alert_dismissing')->content(...$html); +?> +
+ +
diff --git a/src/framework/resource/layout/component/footer-icons.php b/src/framework/resource/layout/component/footer-icons.php new file mode 100644 index 0000000..365d0f5 --- /dev/null +++ b/src/framework/resource/layout/component/footer-icons.php @@ -0,0 +1,29 @@ + 'github.svg', 'url' => 'https://github.com/yiisoft', 'title' => 'GitHub'], + ['icon' => 'slack.svg', 'url' => 'https://join.slack.com/t/yii/shared_invite/...', 'title' => 'Slack'], + ['icon' => 'facebook.svg', 'url' => 'https://www.facebook.com/groups/yiitalk/', 'title' => 'Facebook'], + ['icon' => 'twitter.svg', 'url' => 'https://twitter.com/yiiframework', 'title' => 'Twitter'], + ['icon' => 'telegram.svg', 'url' => 'https://t.me/yii_framework_in_english', 'title' => 'Telegram'], +]; + +foreach ($socialLinks as $link): ?> + attributes(['height' => '24', 'width' => '24']) + ->filePath(Yii::getAlias('@npm/bootstrap-icons/icons/' . $link['icon'])) + ->render(), + $link['url'], + [ + 'class' => 'd-none d-sm-block d-md-block d-lg-block d-xl-block text-muted text-decoration-none ms-3', + 'rel' => 'noopener', + 'title' => $link['title'], + ], + ) ?> +params['app.localeurls.languages'] ?? []; + +foreach ($locales as $key => $value) { + $icon = match ($key) { + 'en' => 'us', + 'zh' => 'cn', + default => $key, + }; + + if (Yii::$app->language === $value) { + $languageLabel = "site.selector.language.$key"; + } + + $items[] = Html::a( + ' ' . Yii::t('app.basic', $languageLabel), + Url::current(['language' => $key]), + [ + 'class' => 'dropdown-item d-flex align-items-center' . (Yii::$app->language === $value ? ' active' : ''), + ], + ); +} +?> +
+ 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', + ], + ) ?> + +
diff --git a/src/framework/resource/layout/component/toggle_theme.php b/src/framework/resource/layout/component/toggle_theme.php new file mode 100644 index 0000000..2033334 --- /dev/null +++ b/src/framework/resource/layout/component/toggle_theme.php @@ -0,0 +1,26 @@ + +attributes(['height' => '24', 'width' => '24']) + ->filePath(Yii::getAlias('@npm/bootstrap-icons/icons/moon-stars.svg')) + ->id('theme-light-icon') + ->render() . + Svg::widget() + ->attributes(['height' => '24', 'width' => '24']) + ->filePath(Yii::getAlias('@npm/bootstrap-icons/icons/sun.svg')) + ->id('theme-dark-icon') + ->render(), + [ + 'class' => 'btn ms-2 me-2', + 'id' => 'theme-toggle', + 'type' => 'button', + 'title' => 'Switch light/dark mode', + ], +) ?> diff --git a/src/framework/resource/layout/footer.php b/src/framework/resource/layout/footer.php new file mode 100644 index 0000000..7f86619 --- /dev/null +++ b/src/framework/resource/layout/footer.php @@ -0,0 +1,41 @@ + + +
+
+
+ YiiFramework™.', + [ + 'class' => 'mb-3 mb-md-0 text-body-secondary', + ], + ), + 'https://www.yiiframework.com/', + [ + 'aria-label' => 'Yii Framework', + 'class' => 'mb-3 mb-md-0 text-body-secondary text-decoration-none lh-1', + 'title' => 'Yii Framework', + ], + ) ?> +
+
+ render('component/footer-icons') ?> + render('component/toggle_theme') ?> + render('component/toggle_language') ?> +
+
+
diff --git a/src/framework/resource/layout/head.php b/src/framework/resource/layout/head.php new file mode 100644 index 0000000..d56a3f2 --- /dev/null +++ b/src/framework/resource/layout/head.php @@ -0,0 +1,17 @@ + + + + + + <?= Html::encode($this->title) ?> + head() ?> + diff --git a/src/framework/resource/layout/main.php b/src/framework/resource/layout/main.php new file mode 100644 index 0000000..2c1be80 --- /dev/null +++ b/src/framework/resource/layout/main.php @@ -0,0 +1,36 @@ + +beginPage() ?> + + + render('head') ?> + + beginBody() ?> +
+
+ render('component/menu') ?> + render('component/alert') ?> + $this->params['breadcrumbs'] ?? [], + ], + ) ?> +
+ + render('footer') ?> +
+ endBody() ?> + + +endPage(); diff --git a/src/Framework/resource/message/de/app.basic.php b/src/framework/resource/message/de/app.basic.php similarity index 100% rename from src/Framework/resource/message/de/app.basic.php rename to src/framework/resource/message/de/app.basic.php diff --git a/src/Framework/resource/message/en/app.basic.php b/src/framework/resource/message/en/app.basic.php similarity index 100% rename from src/Framework/resource/message/en/app.basic.php rename to src/framework/resource/message/en/app.basic.php diff --git a/src/Framework/resource/message/es/app.basic.php b/src/framework/resource/message/es/app.basic.php similarity index 100% rename from src/Framework/resource/message/es/app.basic.php rename to src/framework/resource/message/es/app.basic.php diff --git a/src/Framework/resource/message/fr/app.basic.php b/src/framework/resource/message/fr/app.basic.php similarity index 100% rename from src/Framework/resource/message/fr/app.basic.php rename to src/framework/resource/message/fr/app.basic.php diff --git a/src/Framework/resource/message/pt/app.basic.php b/src/framework/resource/message/pt/app.basic.php similarity index 100% rename from src/Framework/resource/message/pt/app.basic.php rename to src/framework/resource/message/pt/app.basic.php diff --git a/src/Framework/resource/message/ru/app.basic.php b/src/framework/resource/message/ru/app.basic.php similarity index 100% rename from src/Framework/resource/message/ru/app.basic.php rename to src/framework/resource/message/ru/app.basic.php diff --git a/src/Framework/resource/message/zh/app.basic.php b/src/framework/resource/message/zh/app.basic.php similarity index 100% rename from src/Framework/resource/message/zh/app.basic.php rename to src/framework/resource/message/zh/app.basic.php diff --git a/src/UseCase/Controller.php b/src/usecase/Controller.php similarity index 96% rename from src/UseCase/Controller.php rename to src/usecase/Controller.php index 4989468..3a9f5ea 100644 --- a/src/UseCase/Controller.php +++ b/src/usecase/Controller.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace App\UseCase; +namespace app\usecase; use yii\filters\VerbFilter; use yii\web\ErrorAction; diff --git a/src/UseCase/Contact/ContactController.php b/src/usecase/contact/ContactController.php similarity index 83% rename from src/UseCase/Contact/ContactController.php rename to src/usecase/contact/ContactController.php index 77c1270..e0e89d6 100644 --- a/src/UseCase/Contact/ContactController.php +++ b/src/usecase/contact/ContactController.php @@ -2,13 +2,11 @@ declare(strict_types=1); -namespace App\UseCase\Contact; +namespace app\usecase\contact; -use App\UseCase\Contact\Index\IndexAction; -use App\UseCase\Controller; +use app\usecase\Controller; use yii\captcha\CaptchaAction; - -use function array_merge; +use yii\helpers\ArrayHelper; final class ContactController extends Controller { @@ -19,7 +17,7 @@ final class ContactController extends Controller public function actions(): array { - return array_merge( + return ArrayHelper::merge( [ 'index' => [ 'class' => IndexAction::class, diff --git a/src/UseCase/Contact/ContactEvent.php b/src/usecase/contact/ContactEvent.php similarity index 83% rename from src/UseCase/Contact/ContactEvent.php rename to src/usecase/contact/ContactEvent.php index bfd4267..aa97463 100644 --- a/src/UseCase/Contact/ContactEvent.php +++ b/src/usecase/contact/ContactEvent.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace App\UseCase\Contact; +namespace app\usecase\contact; use yii\base\Event; diff --git a/src/UseCase/Contact/ContactForm.php b/src/usecase/contact/ContactForm.php similarity index 98% rename from src/UseCase/Contact/ContactForm.php rename to src/usecase/contact/ContactForm.php index c9c892f..3b20448 100644 --- a/src/UseCase/Contact/ContactForm.php +++ b/src/usecase/contact/ContactForm.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace App\UseCase\Contact; +namespace app\usecase\contact; use Yii; use yii\base\Model; diff --git a/src/UseCase/Contact/Index/IndexAction.php b/src/usecase/contact/IndexAction.php similarity index 87% rename from src/UseCase/Contact/Index/IndexAction.php rename to src/usecase/contact/IndexAction.php index 1cff7ba..08a8848 100644 --- a/src/UseCase/Contact/Index/IndexAction.php +++ b/src/usecase/contact/IndexAction.php @@ -2,15 +2,11 @@ declare(strict_types=1); -namespace App\UseCase\Contact\Index; +namespace app\usecase\contact; -use App\UseCase\Contact\ContactEvent; -use yii\base\Action; -use yii\base\InvalidConfigException; +use yii\base\{Action, InvalidConfigException}; use yii\symfonymailer\Mailer; -use yii\web\Controller; -use yii\web\Request; -use yii\web\Session; +use yii\web\{Controller, Request, Session}; final class IndexAction extends Action { diff --git a/src/usecase/contact/view/index.php b/src/usecase/contact/view/index.php new file mode 100644 index 0000000..a6093c7 --- /dev/null +++ b/src/usecase/contact/view/index.php @@ -0,0 +1,119 @@ +title = Yii::t('app.basic', 'Contact'); +$tabInput = 1; +?> +
+
+
+
+

title) ?>

+

+
+ 'contact-form', + 'layout' => ActiveForm::LAYOUT_FLOATING, + ], + ) ?> + field($model, 'name')->textInput( + [ + 'autofocus' => true, + 'oninvalid' => 'this.setCustomValidity("' . Yii::t('app.basic', 'Enter Username Here') . '")', + 'required' => true, + 'tabindex' => $tabInput++, + ], + ) ?> + field($model, 'email')->textInput( + [ + 'oninvalid' => 'this.setCustomValidity("' . Yii::t('app.basic', 'Enter Email Here') . '")', + 'required' => true, + 'tabindex' => $tabInput++, + ], + ) ?> + field($model, 'subject')->textInput( + [ + 'oninvalid' => 'this.setCustomValidity("' . Yii::t('app.basic', 'Enter Subject Here') . '")', + 'required' => true, + 'tabindex' => $tabInput++, + ], + ) ?> + field($model, 'body')->textarea( + [ + 'oninvalid' => 'this.setCustomValidity("' . Yii::t('app.basic', 'Enter Body Here') . '")', + 'required' => true, + 'style' => 'height: 100px', + 'tabindex' => $tabInput++, + ], + ) ?> + field($model, 'verifyCode', ['labelOptions' => ['id' => 'verifyCode']])->widget( + Captcha::class, + [ + 'captchaAction' => 'contact/captcha', + 'template' => '{input}
' . '' . + Yii::t('app.basic', 'Captcha Code') . ': ' . '' . '{image}
', + 'options' => [ + 'class' => 'form-control', + 'oninvalid' => 'this.setCustomValidity("' . + Yii::t('app.basic', 'Enter Captcha Code Here') . '")', + 'required' => true, + 'tabindex' => $tabInput++, + ], + ], + ) ?> +
+ 'btn btn-lg btn-primary btn-block', + 'name' => 'contact-button', + 'tabindex' => $tabInput++, + ], + ) ?> + +
+
+
+

+ hasFlash('contactFormSubmitted')) : ?> +


+

+ +
+
+ useFileTransport) : ?> + +
+ ' . Yii::getAlias($mailer->fileTransportPath) . '' ?> +
+
+ useFileTransport property of the mail ' . + 'application component to be false to enable email sending.', + ) ?> + +

+ +

+
diff --git a/src/UseCase/Hello/HelloController.php b/src/usecase/hello/HelloController.php similarity index 73% rename from src/UseCase/Hello/HelloController.php rename to src/usecase/hello/HelloController.php index 0e96403..0f6944d 100644 --- a/src/UseCase/Hello/HelloController.php +++ b/src/usecase/hello/HelloController.php @@ -2,10 +2,9 @@ declare(strict_types=1); -namespace App\UseCase\Hello; +namespace app\usecase\hello; -use yii\console\Controller; -use yii\console\ExitCode; +use yii\console\{Controller, ExitCode}; final class HelloController extends Controller { diff --git a/src/UseCase/Site/About/AboutAction.php b/src/usecase/site/AboutAction.php similarity index 85% rename from src/UseCase/Site/About/AboutAction.php rename to src/usecase/site/AboutAction.php index 77be102..df0aa02 100644 --- a/src/UseCase/Site/About/AboutAction.php +++ b/src/usecase/site/AboutAction.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace App\UseCase\Site\About; +namespace app\usecase\site; use yii\base\Action; diff --git a/src/UseCase/Site/SiteController.php b/src/usecase/site/SiteController.php similarity index 84% rename from src/UseCase/Site/SiteController.php rename to src/usecase/site/SiteController.php index 7af21fd..59dc591 100644 --- a/src/UseCase/Site/SiteController.php +++ b/src/usecase/site/SiteController.php @@ -2,10 +2,9 @@ declare(strict_types=1); -namespace App\UseCase\Site; +namespace app\usecase\site; -use App\UseCase\Controller; -use App\UseCase\Site\About\AboutAction; +use app\usecase\Controller; use yii\web\ErrorAction; final class SiteController extends Controller diff --git a/src/usecase/site/view/404.php b/src/usecase/site/view/404.php new file mode 100644 index 0000000..30bec5a --- /dev/null +++ b/src/usecase/site/view/404.php @@ -0,0 +1,29 @@ +title = $name; +?> +
+
+ '404', + 'class' => 'img-fluid mb-4', + ], + ) ?> +
+
+

title) ?>

+
+
+
+
diff --git a/src/usecase/site/view/about.php b/src/usecase/site/view/about.php new file mode 100644 index 0000000..2b6b16c --- /dev/null +++ b/src/usecase/site/view/about.php @@ -0,0 +1,15 @@ +title = Yii::t('app.basic', 'About'); +?> +
+

title) ?>

+

+ +
diff --git a/src/usecase/site/view/index.php b/src/usecase/site/view/index.php new file mode 100644 index 0000000..a51ebbe --- /dev/null +++ b/src/usecase/site/view/index.php @@ -0,0 +1,21 @@ +title = Yii::t('app.basic', 'Index'); +?> +
+

+

+ 'btn btn-primary', + ], + ) ?> +
diff --git a/tests/Unit/HelloControllerTest.php b/tests/Unit/HelloControllerTest.php index 88ab955..58fe88c 100644 --- a/tests/Unit/HelloControllerTest.php +++ b/tests/Unit/HelloControllerTest.php @@ -4,7 +4,7 @@ namespace App\Tests\Unit; -use App\UseCase\Hello\HelloController; +use app\usecase\hello\HelloController; use Codeception\Test\Unit; use Yii;