diff --git a/docker-compose.yml b/docker-compose.yml index 9200437..d8b02bf 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,8 +12,12 @@ services: MYSQL_USER: 'user' MYSQL_PASSWORD: 'password' MYSQL_ROOT_PASSWORD: 'rootPassword' + command: --default-authentication-plugin=mysql_native_password ports: - 3306:3306 + networks: + - backend + - frontend app: build: context: ./docker @@ -23,6 +27,8 @@ services: - "./src/:/app/src" depends_on: - mysql + networks: + - backend nginx: build: context: ./docker @@ -33,5 +39,13 @@ services: - 80:80 depends_on: - app + networks: + - frontend + - backend volumes: database: +networks: + frontend: + external: + name: proxy_proxy + backend: diff --git a/public/assets/css/style.css b/public/assets/css/style.css index e69de29..f341183 100644 --- a/public/assets/css/style.css +++ b/public/assets/css/style.css @@ -0,0 +1,6 @@ +body { + font-family: Verdana, "Geneva CY", "DejaVu Sans", sans-serif; + font-size: 1rem; + font-weight: normal; +} + diff --git a/src/App.php b/src/App.php index ee52f73..a1fab61 100644 --- a/src/App.php +++ b/src/App.php @@ -18,6 +18,10 @@ class App * @var Config */ public $config; + /** + * @var \PDO + */ + public $db = null; public function __construct() { diff --git a/src/controllers/DefaultController.php b/src/controllers/DefaultController.php index b8522bf..e955b8c 100644 --- a/src/controllers/DefaultController.php +++ b/src/controllers/DefaultController.php @@ -13,5 +13,6 @@ class DefaultController extends Controller public function index() { (new View())->index(); + $Model = new \MyApp\Model\GroupsModel(); } } diff --git a/src/core/Model.php b/src/core/Model.php index b2cdfbf..55eb0f6 100644 --- a/src/core/Model.php +++ b/src/core/Model.php @@ -2,8 +2,10 @@ namespace MyApp\Core; +use PDOException; use ReflectionClass; use ReflectionProperty; +use PDO; class Model { @@ -11,12 +13,47 @@ class Model * @var array */ private $internalTableMap; + /** + * @var \App + */ + protected $app; public function __construct(?array $tableMap = null) { - if (!is_array($tableMap)) { + global $app; + $this->app = $app; + + if ( ! is_array($tableMap)) { $this->setInternalTableMap(); } + + if ('db' === $this->getModelType()) { + $this->initDb(); + } + } + + private function initDb(): void + { + if (is_null($this->app->db)) { + try { + $this->app->db = new PDO( + 'mysql:host=mysql;dbname=' + . $this->app->config->getDbName() + . ';port=' + . $this->app->config->getDbPort(), + $this->app->config->getDbUser(), + $this->app->config->getDbPassword(), + array( + PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8', + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ, + PDO::ATTR_ERRMODE => true, + PDO::ATTR_PERSISTENT => true, + )); + } catch (PDOException $e) { + echo 'Подключение не удалось: ' . $e->getMessage(); + } + + } } private function setInternalTableMap() @@ -24,10 +61,10 @@ class Model /* @var \App $app */ global $app; - $tableMap = ['type' => 'bd']; + $tableMap = ['type' => 'db']; $refClass = new ReflectionClass(get_called_class()); - $tags = $app->parseTagsFromComment($refClass->getDocComment(), + $tags = $app->parseTagsFromComment($refClass->getDocComment(), 'TableName'); if ($tags) { if (array_key_exists('TableName', $tags)) { @@ -56,9 +93,16 @@ class Model $this->internalTableMap = array_key_exists('id', $tableMap) ? $tableMap : ['type' => 'other']; } + if ( ! is_array($this->internalTableMap)) { + $this->internalTableMap = ['type' => 'other']; + } } - public function find($id) + public static function find() + { + } + + public static function findOne() { } @@ -69,4 +113,9 @@ class Model { return $this->internalTableMap; } + + public function getModelType(): string + { + return $this->internalTableMap['type']; + } } diff --git a/src/models/GroupsModel.php b/src/models/GroupsModel.php new file mode 100644 index 0000000..1f29a97 --- /dev/null +++ b/src/models/GroupsModel.php @@ -0,0 +1,77 @@ +<?php + + +namespace MyApp\Model; + +use MyApp\Core\Model; + +/** + * Class GroupsModel + * + * @TableName = "groups" + * + * @package MyApp\Model + */ +class GroupsModel extends Model +{ + /** + * @ColumnName = "id" + * @ColumnOption = "id" + * @ColumnType = "int unsigned auto_increment primary key" + * + * @var int + */ + private $id; + /** + * @ColumnName = "name" + * @ColumnType = "varchar(255) null" + * + * @var string + */ + private $name; + /** + * @ColumnName = "parent_id" + * @ColumnType = "int unsigned null" + * + * @var int + */ + private $parent; + + /** + * @return int + */ + public function getId(): ?int + { + return $this->id; + } + + /** + * @return string + */ + public function getName(): string + { + return $this->name; + } + + /** + * @param string $name + * + * @return GroupsModel + */ + public function setName(string $name): self + { + $this->name = $name; + return $this; + } + + /** + * @param int $parent + * + * @return GroupsModel + */ + public function setParent(int $parent): self + { + $this->parent = $parent; + return $this; + } +} \ No newline at end of file diff --git a/src/models/ServersModel.php b/src/models/ServersModel.php new file mode 100644 index 0000000..a88b918 --- /dev/null +++ b/src/models/ServersModel.php @@ -0,0 +1,13 @@ +<?php + + +namespace MyApp\Model; + + +class ServersModel +{ + private $id; + private $name; + private $ip; + private $group; +} \ No newline at end of file