imissher/first-sprint

There is no license information available for the latest version (v1.0) of this package.

The first attempt to create a framework in pure php

v1.0 2023-11-21 08:30 UTC

This package is auto-updated.

Last update: 2024-09-21 12:32:14 UTC


README

FirstSprint - это моя первая попытка создать фреймворк, подобие фреймворка на чистом PHP. Вдохновленный идеями Laravel, поэтому где-то названия функций и классов могут пересекаться XD


Сразу хочу сказать, что так как это первый опыт, то не исключены какие либо баги, недоработки. Проект пишется для практики и более глубокого понимания концепции работы языка и WEB технологий в принципе. Спасибо за внимание!

Установка

Для установки проекта необходимо написать в командную строчку

git clone https://github.com/algrvvv/FirstSprint.git

или через composer

composer require imissher/first-sprint

После установки обязательно сделать установку композера!

composer i

Работа с роутами

Файл routes/web.php будет служить главным отправным пунктом, для каждого вашего роута. Примеры работы с роутами:

  1. Обычный get запрос
Route::get('url', 'path/to/file', [NameController::class, 'func_name']);

// последний массив с передачей класса и названия функции необязателен
  1. Для post запросов
Route::post('url', NameController::class, 'func_name');
  1. Middleware's

Все правила по ограничению прав находяться в классе app\Services\Middleware\Kernel.php. С самого начала работы, будут доступны такие как guest и auth. По желанию их всегда можно дополнить нужными для вас правилами!

Route::middleware([
    'url' => 'rule'
]);

Функция fallback яв-ся необходимой для работы сайта, так что убрав ее, сайт может попрасту перестать работать D:

Отображение странц

Для отображения вашей страницы нужно добавить роут, а так же создать сам шаблон вашей страницы.

Обязательным яв-ся то, что все ваши шаблоны должны быть расширением .php, иначе они не будут восприниматься и будет выдавать ошибку

Его следует создавать по в папке views. Все папки создаваемые в ней, должны указываться в пути для отображения вашей страницы.

Для отображения вашей страницы через контроллеры или отображения на странцие кусочка другого шаблона, можно использовать заранее заготовленный класс View.

use App\Services\Views\View; 

class NameController
{
    public function func_name()
    {
        //some code
        View::render('path/to/view', ['variable name' => $value]);
        //массив значений не обязательный параметр
    }
}

Чтобы потом работать с переменными, которые вы передали на страницу читайте это

Работа с сессиями

Обычная работа с сессиями:

use App\Services\Session\Session;

$s = new Session();

$s->create_session('name', $value); // создание
$s->get_session('name'); // получение
$s->unset_session('name'); // удаление

Получение данных после редиректа

Чтобы получить данные на странице шаблона, котрые вы например получили при выборке из БД в своем контроллере, достаточно лишь в начале вашего шаблона открыть тег php импортировать класс Session и с помощью функции получить нужные данные.

use App\Services\Session\Session;

$s = new Session();
$s->get_session('varible_name');

Работа с базой данных

Чтобы подключить базу данных, необходимо ввести данные для подключения в app\Services\Database\DBW.php

    private string $DB_HOST = 'localhost';
    private string $DB_PORT = '3306';
    private string $DB_NAME = "db_name";
    private string $DB_USERNAME = "db_username";
    private string $DB_PASSWORD = "db_password";

Для более удобной работы с БД был написан класс DBW, который имеет примерно следующий список функций:

  1. select() - как и в Sql, функция служит для получения строк из таблицы базы данных.
use App\Services\Database\DBW;

$db = new DBW();

$db->select(['login', 'password'], 'db_name')->get();
  1. where() - создание условия для выборки.
use App\Services\Database\DBW;

$db = new DBW();

$db->select(['*'], 'db_name')->where('id', $id)->get();

Для нескольких условий можно использовать:

$db->select('...')->where('id', $id)->where('email', $email)->get();

Также функция может создавать условия, используя IN, AND, OR. Пример:

$db->select(['*'], 'db_name')->where('id', $arr_id, separator: 'IN')->get();
  1. insert() - добавление данных

Очень важно понимать, что передавать нужно ассоциативный массив данных.

$db->insert(['name' => 'John', 'key' => 'value'], 'db_name');
  1. delete() - удаление нужной строчки из таблицы

Очень важно понимать, что передавать нужно ассоциативный массив данных. В этом случае массив послужит условием для удаления.

$db->delete(['key' => 'value'] ,'db_name');
  1. update() - обновление данных строки в БД

Первым параметром передается ассоциативный массив, в котором лежат данные, которые мы хотим обновить. Вторым параметром условия для обновления. К примеру, найти того самого пользователя, у которого мы хотим обновить данные.

$db->update(['key' => 'value'], ['id', $id], 'db_name');
  1. join() - метод, который является реализацией операции соединения таблиц.

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

$db->select(['*'], 't1')->join(['t1.id' => 't2.t1_id'], 't2')->get();
  1. orderBy()

Приниамает первым параметром поле, по которому вы хотите сортировать, а вторым парметром - [ASC | DESC]

$db->select(['*'], 't1')->orderBy('field', 'ASC')->get();
  1. groupBy()

Передается название поля, по которому вы хотите сгруппировать ваш запрос

$db->select(['*'], 't1')->groupBy('field')->get();
  1. like()

Первый параметр - поле, по которому вы хотите произвести поиск. Второй параметр - значение, котрые вы хотите найти

$db->select(['*'], 't1')->like('field', '%text%')->get();
  1. getQuery() - функция, которая покажет как выглядит ваш запрос, не выполняя его. Полезна, чтобы проверить на наличие ошибок в запросе.
$db->select(['*'], 'db_name')->where('id', $id)->getQuery();
//вернет строку