За последние 24 часа нас посетили 7788 программистов и 497 роботов. Сейчас ищут 192 программиста ...

Task framewok

Тема в разделе "Прочее", создана пользователем Padaboo, 16 окт 2020.

  1. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.238
    Симпатии:
    0
    Доброго времени суток.
    Разрабатываю фреймворк решил поделить первыми версиями

    task-framework.blogspot.com
    https://habr.com/ru/post/523828/

    О фреймворке

    Task framework основан на MVC парадигме с удобством использования и минимум функционала для решения простых задач.

    В отличие от стандартных решений вместо контроллера тут используется задача (task)

    jsock-framework-tutorial.blogspot.com

    java-framework-jsocket.blogspot.com
    github.com/nnpa/jsock

    Установка фреймворка task


    1. Скачайте архив с фреймворком

    2. Распакуйте в папку task в директорию где у вас хранятся сайты.

    3. Скачайте каркас для приложения

    5. Распакуйте в папку site в в директорию где у вас хранятся сайты.

    6. Создайте базу данных в mysql.

    7. Скачайте таблицу users и экспортируйте в созданную базу данных.

    Должно получится такое дерево каталогов

    /webroot/task

    /webroot/site

    8. Настройте веб сервер что бы корневая папка /webroot/site была привязана к определенному хосту при помощи веб сервера который вы используете.

    9. Зайдите в папку config и откройте config.php и отредактируйте массив подключения к базе данных на ваши значения подключения и переменную host.

    MVC парадигма

    Task framework использует MVC парадигму для лучшего разделения логики шаблонов представлений, моделей и контроллера.

    Вместо контроллера в Task framework используются задачи Task — задачи расположены в папке tasks и предназначены для выполнения логики приложения.

    Модели хранятся в папке models и предназначены для работы с логикой базы данных.

    Представления хранятся в папке view и предназначены для работы с логикой представления.

    Task

    Task (или Controller) располагаются в папке tasks.

    Task создаются по переменной в url сайта request:

    Если переменная request = test то будет создан экземпляр класса Task который хранится в папке tasks в файле test.php и называется test.

    index.php?request=test

    Пример класса test.php:
    Код (Text):
    1. include_once('WebTask.php');
    2.  
    3. class Test extends WebTask{
    4.  
    5.     public function run(){
    6.  
    7.           //логика приложения
    8.  
    9.         }
    10.  
    11. }

    Обязательно task должен быть унаследован от WebTask и в нем должен быть создан метод run()

    Models

    Models располагаются в папке models и отвечают за логику работы с базой данных.

    Модели привычнее всего создавать в tasks.

    Модель должна быть создана в папке models и быть унаследована от Model так же должно быть прописано поле $table_name.

    Пример класса models/users.php:
    Код (Text):
    1.  
    2. class Users extends Model{
    3.  
    4.     public $table_name = 'users';
    5.  
    6. }

    В классе Model заранее реализован набор методов для работы с базой данных.

    findBySql
    Код (Text):
    1.  
    2.  
    3. $users = new Users();
    4.  
    5. $users->findBySql("SELECT * FROM `users`");
    6.  
    7. foreach($users as $user) {
    8.  
    9.       echo $user['email'] . "<br>";
    10.  
    11. }

    findByPk
    Код (Text):
    1.  
    2.  
    3. $users = new Users();
    4.  
    5. $users->findByPk(3);
    6.  
    7. echo $users->email;
    find
    Код (Text):
    1.  
    2. $users = new Users();
    3.  
    4. $users->find("email <> ''");
    5.  
    6. foreach($users as $user) {
    7.  
    8.      echo $user['email'] . "<br>";
    9.  
    10. }
    update
    Код (Text):
    1.  
    2. $users = new Users();
    3.  
    4. $users->findByPk(3);
    5.  
    6. $users->email = "yandex@mail.ru";
    7.  
    8. $users->update();
    save
    Код (Text):
    1.  
    2.  
    3. $users = new Users();
    4.  
    5. $users->email = "yandex@mail.ru";
    6.  
    7. $users->id    = NULL;
    8.  
    9. $users->save();
    delete
    Код (Text):
    1.  
    2. $users = new Users();
    3.  
    4. $users->delete("id = 6");
    exec
    Код (Text):
    1.  
    2. $users = new Users();
    3.  
    4. $users->exec("free sql string"); //mysqli_result
    DB
    Код (Text):
    1.  
    2. App::$DB->exec("free sql string");//mysqli_result

    view

    Шаблоны представлений хранятся в папке /view/ отвечают за логику представлений.

    Представление вызывается в конце метода run класса task при помощи метода render.

    В представление передаются переменные которые будут использованы в логике представления.

    Пример site task:
    Код (Text):
    1.  
    2. include_once('WebTask.php');
    3.  
    4. class Site extends WebTask{
    5.  
    6.     public function run(){
    7.  
    8.               $users = new Users();
    9.  
    10.                $users->find("email <> ''");
    11.  
    12.            $this->render('site',[
    13.  
    14.             'users' => $users,
    15.  
    16.         ]);
    17.  
    18.     }
    19.  
    20. }
    В методе run модель с пользователями передается в шаблон view/site.php где происходит обработка результатов поиска и генерация html:
    Код (Text):
    1.  
    2. <?php
    3.  
    4. foreach($users as $user) {
    5.  
    6.     echo $user['email'] . "<br>";
    7.  
    8. }
    9.  
    10. ?>
    Так же в папке view/layout расположен основной шаблон main.php который является главным шаблоном куда в переменную {content} подгружаются наши представления.

    Авторизация пользователя

    В фреймворке уже реализована регистрация и авторизация по ссылкам login и register.

    Метод приложения который позволяет проверять являет ли пользователь авторизованным App::isGuest()

    В завершении
    task-framework blog

    Фреймворк будет дальше разрабатывать и тестироваться на разрабатываемых на нем приложениях.

    Cпасибо.
     
    #1 Padaboo, 16 окт 2020
    Последнее редактирование: 20 окт 2020 в 22:57
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    2.709
    Симпатии:
    429
    Копипаст рулит!

    И модеров не учили норм. оформлять вставки кода?

    Как я понял, задача отличается от контроллера только тем, что у нее название короче :) Или есть какие-то существенные отличия?
     
  3. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.238
    Симпатии:
    0
    Поправил вставил
    Код (Text):
    1.  
    2. Да задача короче контроллера и там нет реализации прав пользователя и в модели нет проверки правильности полей
    3. В целом фреймворк легче и проще чем yii и laravel
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    2.395
    Симпатии:
    465
    Адрес:
    Татарстан
    Шаблонизатор какой? Есть ли возможность гибкой настройки роутов? И разграничения методов get/post/put/delete ?
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    2.709
    Симпатии:
    429
    Походу там захардкодено во фронте дерганье задачи по GET-параметру:
    --- Добавлено ---
    Нужно скачать посмотреть :)
    --- Добавлено ---
    PHP:
    1. <?php include_once(App::$document_root . DIRECTORY_SEPARATOR  . "config". DIRECTORY_SEPARATOR  ."config.php");?>
    2.  
    3. <?php
    4. App::run($config);
    5. ?>
    Вывод пустой строки перед App::run, серьезно?
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    2.709
    Симпатии:
    429
    PHP:
    1.             include_once($task_path);
    2.          
    3.             $task = new $request();
    Инклудим практически любой php-файл. Нет никакой защиты от request=../file и т.п. Если файл загружен взломщиком, то в нем можно спокойно переопределить $request и все будет шито-крыто.
     
  7. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    2.395
    Симпатии:
    465
    Адрес:
    Татарстан
    На Хабре заминусовали пост...
     
  8. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.238
    Симпатии:
    0
    Шаблонизатора никакого - как говорят php и есть лучший шаблонизатор
    Насчет настройки роутов нужно подумать
    Разграничений тоже нет этим роутинг ближе к yii в laravel есть такая настройка
    --- Добавлено ---
    Попробую заглушку поставить и поинклудить
     
  9. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    2.395
    Симпатии:
    465
    Адрес:
    Татарстан
    На какую нишу направлен фреймворк?
    Каковы плюсы? Есть ли примеры его практического использования?

    И это.. инклуды прям так писать - позапрошлый век. Прочтите про автозагрузки классов
     
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    2.709
    Симпатии:
    429
    Инклудить контроллер явно вполне норм. (если фронту известен способ образования имени подключаемого файла). А вот всякие модельки и т.п., да, можно через автозагрузку.
     
  11. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    2.709
    Симпатии:
    429
    С одним экшеном – это, наверное, для REST-приложений. Правда, там обычно бывает еще деление по типам HTTP-запросов, о чем ты выше спрашивал, но в простейшем случае это можно разруливать внутри единственного обработчика. Также можно на уровне Web-сервера распределить запросы разных типов по разным задачам, хотя это и отстой.
     
  12. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.238
    Симпатии:
    0
    Да это для небольших сервисов
    Исправил несколько ошибок в архитектуре
    Добавил автозагрузку моделей
     
  13. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    2.395
    Симпатии:
    465
    Адрес:
    Татарстан
    Если для сервисов и апи, то точно надо возможность разделения методов и гибкий роутинг, с масками переменных и тем же разделением методов, + не помешали бы методы ответов а json с статусами ответов (200, 404) итд
     
  14. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.238
    Симпатии:
    0