ソースを参照

Первый коммит

Alexander Musikhin 2 年 前
コミット
cf41ddd4f2

+ 4 - 0
.htaccess

@@ -0,0 +1,4 @@
+RewriteEngine On
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteCond %{REQUEST_FILENAME} !-d
+RewriteRule .* index.php [L]

+ 8 - 0
.idea/.gitignore

@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml

+ 8 - 0
.idea/MyProject.iml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 28 - 0
.idea/deployment.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="PublishConfigData" remoteFilesAllowedToDisappearOnAutoupload="false">
+    <serverData>
+      <paths name="8pay">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="docker">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="ftp://dth.myjino.ru:21">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+    </serverData>
+  </component>
+</project>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/MyProject.iml" filepath="$PROJECT_DIR$/.idea/MyProject.iml" />
+    </modules>
+  </component>
+</project>

+ 19 - 0
.idea/php.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="MessDetectorOptionsConfiguration">
+    <option name="transferred" value="true" />
+  </component>
+  <component name="PHPCSFixerOptionsConfiguration">
+    <option name="transferred" value="true" />
+  </component>
+  <component name="PHPCodeSnifferOptionsConfiguration">
+    <option name="highlightLevel" value="WARNING" />
+    <option name="transferred" value="true" />
+  </component>
+  <component name="PhpStanOptionsConfiguration">
+    <option name="transferred" value="true" />
+  </component>
+  <component name="PsalmOptionsConfiguration">
+    <option name="transferred" value="true" />
+  </component>
+</project>

+ 8 - 0
app/bootstrap.php

@@ -0,0 +1,8 @@
+<?php
+
+require_once ('core/controller.php');
+require_once ('core/model.php');
+require_once ('core/view.php');
+require_once ('core/route.php');
+
+Route::start();

+ 19 - 0
app/controllers/controller_main.php

@@ -0,0 +1,19 @@
+<?php
+
+
+
+class controller_main extends Controller
+{
+    public function __construct()
+    {
+        if(empty($_SESSION['user'])){
+            header('Location: /user/login');
+        }
+    }
+
+    function index()
+    {
+        $this->view->generate('main_view.php', 'template_view.php');
+
+    }
+}

+ 17 - 0
app/controllers/controller_user.php

@@ -0,0 +1,17 @@
+<?php
+
+class controller_user extends Controller
+{
+
+    // login page
+    public function login(){
+        if(isset($_POST['login'], $_POST['password'])){
+            // todo обратиться к модели: есть ли пользователь,
+            // todo если нет - создать и залогинить (установить user в сессии)
+            // todo если есть - проверить пароль
+
+        }
+
+        $this->view->generate('login_view.php');
+    }
+}

+ 18 - 0
app/core/controller.php

@@ -0,0 +1,18 @@
+<?php
+
+
+
+class Controller
+{
+
+    public $model;
+    public $view;
+
+    function __construct()    {
+        $this->view = new View();
+    }
+
+    function index()
+    {
+    }
+}

+ 10 - 0
app/core/model.php

@@ -0,0 +1,10 @@
+<?php
+
+namespace core;
+
+class model
+{
+    public function get_data()
+    {
+    }
+}

+ 84 - 0
app/core/route.php

@@ -0,0 +1,84 @@
+<?php
+
+
+
+class Route
+{
+    static function start()
+    {
+        // контроллер и действие по умолчанию
+        $controller_name = 'Main';
+        $action_name = 'index';
+
+        $routes = explode('/', $_SERVER['REQUEST_URI']);
+
+        // получаем имя контроллера
+        if ( !empty($routes[1]) )
+        {
+            $controller_name = $routes[1];
+        }
+
+        // получаем имя экшена
+        if ( !empty($routes[2]) )
+        {
+            $action_name = $routes[2];
+        }
+
+
+        // добавляем префиксы
+        $model_name = 'Model_'.$controller_name;
+        $controller_name = 'Controller_'.$controller_name;
+
+
+
+        // подцепляем файл с классом модели (файла модели может и не быть)
+
+        $model_file = strtolower($model_name).'.php';
+        $model_path = "app/models/".$model_file;
+        if(file_exists($model_path))
+        {
+            include "app/models/".$model_file;
+        }
+
+        // подцепляем файл с классом контроллера
+        $controller_file = strtolower($controller_name).'.php';
+        $controller_path = "app/controllers/".$controller_file;
+
+        if(file_exists($controller_path))
+        {
+            include "app/controllers/".$controller_file;
+        }
+        else
+        {
+            /*
+            правильно было бы кинуть здесь исключение,
+            но для упрощения сразу сделаем редирект на страницу 404
+            */
+            Route::ErrorPage404();
+        }
+
+        // создаем контроллер
+        $controller = new $controller_name;
+        $action = $action_name;
+
+        if(method_exists($controller, $action))
+        {
+            // вызываем действие контроллера
+            $controller->$action();
+        }
+        else
+        {
+            // здесь также разумнее было бы кинуть исключение
+            Route::ErrorPage404();
+        }
+
+    }
+
+    public  static function ErrorPage404()
+    {
+        $host = 'http://'.$_SERVER['HTTP_HOST'].'/';
+        header('HTTP/1.1 404 Not Found');
+        header("Status: 404 Not Found");
+        header('Location:'.$host.'404');
+    }
+}

+ 16 - 0
app/core/view.php

@@ -0,0 +1,16 @@
+<?php
+
+
+class view
+{
+    public function generate($content_view, $template_view = 'template_view.php', $data = null)
+    {
+
+        if(is_array($data)) {
+            // преобразуем элементы массива в переменные
+            extract($data);
+        }
+
+        include 'app/views/'.$template_view;
+    }
+}

+ 33 - 0
app/views/login_view.php

@@ -0,0 +1,33 @@
+<form action="/user/login" method="post">
+    <div class="row mt-5">
+        <div class="col-12 my-4 fs-1">Вход</div>
+        <div class="col-4">
+            <input class="form-control" type="text" name="login" placeholder="логин">
+        </div>
+        <div class="col-4">
+            <input class="form-control" type="password" name="password" placeholder="пароль">
+        </div>
+        <div class="col-4">
+            <input type="submit" class="btn btn-dark">
+        </div>
+    </div>
+</form>
+
+
+<form action="/user/register" method="post">
+    <div class="row mt-5">
+        <div class="col-12 my-4 fs-1">Регистрация</div>
+        <div class="col-3">
+            <input class="form-control" type="text" name="login" placeholder="логин">
+        </div>
+        <div class="col-3">
+            <input class="form-control" type="password" name="password" placeholder="пароль">
+        </div>
+        <div class="col-3">
+            <input class="form-control" type="password" name="password_confirm" placeholder="подтверждение пароля">
+        </div>
+        <div class="col-3">
+            <input type="submit" class="btn btn-dark">
+        </div>
+    </div>
+</form>

+ 2 - 0
app/views/main_view.php

@@ -0,0 +1,2 @@
+d asjdj
+

+ 20 - 0
app/views/template_view.php

@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="ru">
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous">
+    <title>Блог</title>
+</head>
+    <body>
+        <section>
+            <div class="container">
+                <!-- main block -->
+                <?php include 'app/views/'.$content_view; ?>
+                <!-- end main block -->
+            </div>
+        </section>
+        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe" crossorigin="anonymous"></script>
+    </body>
+</html>

+ 3 - 0
index.php

@@ -0,0 +1,3 @@
+<?php
+ini_set('display_errors', 1);
+require_once 'app/bootstrap.php';