+Необходима база данных, в mysql с названием yii2basic
+Также нужен pdo_mysql
-Yii 2 Basic Project Template is a skeleton [Yii 2](http://www.yiiframework.com/) application best for
-rapidly creating small projects.
+Применение миграций
+php yii migrate
-The template contains the basic features including user login/logout and a contact page.
-It includes all commonly used configurations that would allow you to focus on adding new
-features to your application.
+Запуск
+php yii serve --port=8088
-[![Latest Stable Version](https://img.shields.io/packagist/v/yiisoft/yii2-app-basic.svg)](https://packagist.org/packages/yiisoft/yii2-app-basic)
-[![Total Downloads](https://img.shields.io/packagist/dt/yiisoft/yii2-app-basic.svg)](https://packagist.org/packages/yiisoft/yii2-app-basic)
-[![build](https://github.com/yiisoft/yii2-app-basic/workflows/build/badge.svg)](https://github.com/yiisoft/yii2-app-basic/actions?query=workflow%3Abuild)
+Команды Api:
+ /api/total
+ /api/view?id=[id картинки]
+ /api/list?page=[номер страницы] //1 страница содержит информацию 10 картинок
-DIRECTORY STRUCTURE
--------------------
-
- assets/ contains assets definition
- commands/ contains console commands (controllers)
- config/ contains application configurations
- controllers/ contains Web controller classes
- mail/ contains view files for e-mails
- models/ contains model classes
- runtime/ contains files generated during runtime
- tests/ contains various tests for the basic application
- vendor/ contains dependent 3rd-party packages
- views/ contains view files for the Web application
- web/ contains the entry script and Web resources
-
-
-
-REQUIREMENTS
-------------
-
-The minimum requirement by this project template that your Web server supports PHP 7.4.
-
-
-INSTALLATION
-------------
-
-### Install via Composer
-
-If you do not have [Composer](http://getcomposer.org/), you may install it by following the instructions
-at [getcomposer.org](http://getcomposer.org/doc/00-intro.md#installation-nix).
-
-You can then install this project template using the following command:
-
-~~~
-composer create-project --prefer-dist yiisoft/yii2-app-basic basic
-~~~
-
-Now you should be able to access the application through the following URL, assuming `basic` is the directory
-directly under the Web root.
-
-~~~
-http://localhost/basic/web/
-~~~
-
-### Install from an Archive File
-
-Extract the archive file downloaded from [yiiframework.com](http://www.yiiframework.com/download/) to
-a directory named `basic` that is directly under the Web root.
-
-Set cookie validation key in `config/web.php` file to some random secret string:
-
-```php
-'request' => [
- // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
- 'cookieValidationKey' => '',
-],
-```
-
-You can then access the application through the following URL:
-
-~~~
-http://localhost/basic/web/
-~~~
-
-
-### Install with Docker
-
-Update your vendor packages
-
- docker-compose run --rm php composer update --prefer-dist
-
-Run the installation triggers (creating cookie validation code)
-
- docker-compose run --rm php composer install
-
-Start the container
-
- docker-compose up -d
-
-You can then access the application through the following URL:
-
- http://127.0.0.1:8000
-
-**NOTES:**
-- Minimum required Docker engine version `17.04` for development (see [Performance tuning for volume mounts](https://docs.docker.com/docker-for-mac/osxfs-caching/))
-- The default configuration uses a host-volume in your home directory `.docker-composer` for composer caches
-
-
-CONFIGURATION
--------------
-
-### Database
-
-Edit the file `config/db.php` with real data, for example:
-
-```php
-return [
- 'class' => 'yii\db\Connection',
- 'dsn' => 'mysql:host=localhost;dbname=yii2basic',
- 'username' => 'root',
- 'password' => '1234',
- 'charset' => 'utf8',
-];
-```
-
-**NOTES:**
-- Yii won't create the database for you, this has to be done manually before you can access it.
-- Check and edit the other files in the `config/` directory to customize your application as required.
-- Refer to the README in the `tests` directory for information specific to basic application tests.
-
-
-TESTING
--------
-
-Tests are located in `tests` directory. They are developed with [Codeception PHP Testing Framework](http://codeception.com/).
-By default, there are 3 test suites:
-
-- `unit`
-- `functional`
-- `acceptance`
-
-Tests can be executed by running
-
-```
-vendor/bin/codecept run
-```
-
-The command above will execute unit and functional tests. Unit tests are testing the system components, while functional
-tests are for testing user interaction. Acceptance tests are disabled by default as they require additional setup since
-they perform testing in real browser.
-
-
-### Running acceptance tests
-
-To execute acceptance tests do the following:
-
-1. Rename `tests/acceptance.suite.yml.example` to `tests/acceptance.suite.yml` to enable suite configuration
-
-2. Replace `codeception/base` package in `composer.json` with `codeception/codeception` to install full-featured
- version of Codeception
-
-3. Update dependencies with Composer
-
- ```
- composer update
- ```
-
-4. Download [Selenium Server](http://www.seleniumhq.org/download/) and launch it:
-
- ```
- java -jar ~/selenium-server-standalone-x.xx.x.jar
- ```
-
- In case of using Selenium Server 3.0 with Firefox browser since v48 or Google Chrome since v53 you must download [GeckoDriver](https://github.com/mozilla/geckodriver/releases) or [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/downloads) and launch Selenium with it:
-
- ```
- # for Firefox
- java -jar -Dwebdriver.gecko.driver=~/geckodriver ~/selenium-server-standalone-3.xx.x.jar
-
- # for Google Chrome
- java -jar -Dwebdriver.chrome.driver=~/chromedriver ~/selenium-server-standalone-3.xx.x.jar
- ```
-
- As an alternative way you can use already configured Docker container with older versions of Selenium and Firefox:
-
- ```
- docker run --net=host selenium/standalone-firefox:2.53.0
- ```
-
-5. (Optional) Create `yii2basic_test` database and update it by applying migrations if you have them.
-
- ```
- tests/bin/yii migrate
- ```
-
- The database configuration can be found at `config/test_db.php`.
-
-
-6. Start web server:
-
- ```
- tests/bin/yii serve
- ```
-
-7. Now you can run all available tests
-
- ```
- # run all available tests
- vendor/bin/codecept run
-
- # run acceptance tests
- vendor/bin/codecept run acceptance
-
- # run only unit and functional tests
- vendor/bin/codecept run unit,functional
- ```
-
-### Code coverage support
-
-By default, code coverage is disabled in `codeception.yml` configuration file, you should uncomment needed rows to be able
-to collect code coverage. You can run your tests and collect coverage with the following command:
-
-```
-#collect coverage for all tests
-vendor/bin/codecept run --coverage --coverage-html --coverage-xml
-
-#collect coverage only for unit tests
-vendor/bin/codecept run unit --coverage --coverage-html --coverage-xml
-
-#collect coverage for unit and functional tests
-vendor/bin/codecept run functional,unit --coverage --coverage-html --coverage-xml
-```
-
-You can see code coverage output under the `tests/_output` directory.
+Страницы:
+ /file/upload - загрузка картинок
+ /file/index - список картинок
diff --git a/basic/config/db.php b/basic/config/db.php
index bc75e61..3e7f9aa 100644
--- a/basic/config/db.php
+++ b/basic/config/db.php
@@ -4,7 +4,7 @@ return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2basic',
'username' => 'root',
- 'password' => '',
+ 'password' => 'admin123',
'charset' => 'utf8',
// Schema cache options (for production environment)
diff --git a/basic/config/web.php b/basic/config/web.php
index 01c33bf..e397da4 100644
--- a/basic/config/web.php
+++ b/basic/config/web.php
@@ -13,8 +13,10 @@ $config = [
],
'components' => [
'request' => [
- // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
- 'cookieValidationKey' => 'mLq6Q3uaZ7Iptae9zNfPrFi5kiiSBSrO',
+ 'cookieValidationKey' => 'bbpNZlHAOLcTL_O8Hs-093LSyLklLrEa',
+ 'parsers' => [
+ 'application/json' => 'yii\web\JsonParser',
+ ]
],
'cache' => [
'class' => 'yii\caching\FileCache',
@@ -42,14 +44,19 @@ $config = [
],
],
'db' => $db,
- /*
'urlManager' => [
'enablePrettyUrl' => true,
+ 'enableStrictParsing' => false,
'showScriptName' => false,
'rules' => [
+ ['class' => 'yii\rest\UrlRule', 'controller' => 'api'],
],
+ ]
+ ],
+ 'controllerMap' => [
+ 'api' => [
+ 'class' => 'app\controllers\ApiController',
],
- */
],
'params' => $params,
];
diff --git a/basic/controllers/ApiController.php b/basic/controllers/ApiController.php
new file mode 100644
index 0000000..3226fdd
--- /dev/null
+++ b/basic/controllers/ApiController.php
@@ -0,0 +1,55 @@
+count();
+ return ['total' => $count];
+ }
+
+ public function actionList($page = 1)
+ {
+ $limit = 10;
+ $offset = ($page - 1) * $limit;
+
+ $images = Image::find()
+ ->orderBy(['created_at' => SORT_DESC])
+ ->limit($limit)
+ ->offset($offset)
+ ->all();
+
+ $list = [];
+ foreach ($images as $image) {
+ $list[] = [
+ 'id' => $image->id,
+ 'path' => 'uploads/' . $image->filename,
+ ];
+ }
+
+ return ['page' => $page, 'list' => $list];
+ }
+
+ public function actionView($id)
+ {
+ $image = Image::findOne($id);
+ if ($image) {
+ return ['id' => $image->id, 'path' => $image->filename];
+ } else {
+ return ['error' => 'Изображение не найдено.'];
+ }
+ }
+}
\ No newline at end of file
diff --git a/basic/controllers/FileController.php b/basic/controllers/FileController.php
new file mode 100644
index 0000000..a771de9
--- /dev/null
+++ b/basic/controllers/FileController.php
@@ -0,0 +1,55 @@
+ $query,
+ 'pagination' => [
+ 'pageSize' => 10,
+ ],
+ 'sort' => [
+ 'defaultOrder' => [
+ 'id' => SORT_ASC,
+ ]
+ ],
+ ]);
+
+ return $this->render('index', ['dataProvider' => $dataProvider]);
+ }
+
+ public function actionView($id)
+ {
+ $image = Image::findOne($id);
+ if (!$image) {
+ throw new NotFoundHttpException('The requested page does not exist.');
+ }
+
+ return $this->render('view', ['src' => '/uploads/' . $image->filename]);
+ }
+
+ public function actionUpload()
+ {
+ $model = new UploadForm();
+ if (Yii::$app->request->isPost) {
+ $model->imageFiles = UploadedFile::getInstances($model, 'imageFiles');
+ if ($model->upload()) {
+ Yii::$app->getSession()->setFlash('success', 'Изображения загружены!');
+ return $this->redirect(['upload']);
+ }
+ }
+ return $this->render('upload', ['model' => $model]);
+ }
+}
\ No newline at end of file
diff --git a/basic/controllers/SiteController.php b/basic/controllers/SiteController.php
index 67c3f50..b9d982f 100644
--- a/basic/controllers/SiteController.php
+++ b/basic/controllers/SiteController.php
@@ -61,7 +61,7 @@ class SiteController extends Controller
*/
public function actionIndex()
{
- return $this->render('index');
+ return $this->redirect('file/upload/');
}
/**
diff --git a/basic/migrations/m230328_011637_create_image_table.php b/basic/migrations/m230328_011637_create_image_table.php
new file mode 100644
index 0000000..27295df
--- /dev/null
+++ b/basic/migrations/m230328_011637_create_image_table.php
@@ -0,0 +1,29 @@
+createTable('image', [
+ 'id' => $this->primaryKey(),
+ 'filename' => $this->string(255)->notNull(),
+ 'created_at' => $this->dateTime()->notNull(),
+ ]);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function safeDown()
+ {
+ $this->dropTable('image');
+ }
+}
diff --git a/basic/models/Image.php b/basic/models/Image.php
new file mode 100644
index 0000000..6b55c9d
--- /dev/null
+++ b/basic/models/Image.php
@@ -0,0 +1,16 @@
+filename;
+ }
+}
\ No newline at end of file
diff --git a/basic/models/UploadForm.php b/basic/models/UploadForm.php
new file mode 100644
index 0000000..f23a45e
--- /dev/null
+++ b/basic/models/UploadForm.php
@@ -0,0 +1,50 @@
+ false, 'extensions' => 'png, jpg, jpeg, gif', 'maxFiles' => 5],
+ ];
+ }
+
+ public function upload()
+ {
+ if ($this->validate()) {
+ foreach ($this->imageFiles as $file) {
+ $fileName = strtolower(Inflector::transliterate($file->baseName));
+ $filePath = 'uploads/' . $fileName . '.' . $file->extension;
+ if (!file_exists("uploads/")){
+ mkdir("uploads/", 0777);
+ }
+ $counter = 0;
+ while (file_exists($filePath)){
+ $counter++;
+ $fileName = $fileName . 'uniq' . $counter;
+ $filePath = 'uploads/' . $fileName . '.' . $file->extension;
+ }
+ $file->saveAs($filePath);
+ $model = new Image();
+ $model->filename = $fileName . '.' . $file->extension;
+ $model->created_at = date('Y-m-d H:i:s');
+ $model->save();
+ }
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+}
diff --git a/basic/views/file/index.php b/basic/views/file/index.php
new file mode 100644
index 0000000..e3e894f
--- /dev/null
+++ b/basic/views/file/index.php
@@ -0,0 +1,37 @@
+title = 'PicHost view';
+?>
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
- dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
- ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
- fugiat nulla pariatur.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
- dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
- ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
- fugiat nulla pariatur.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
- dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
- ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
- fugiat nulla pariatur.