Оценка фреймворка «Dvijok framework»

Сразу к делу. Собственно, сразу дам ссылку — это модульный движок на основе mvc внутри каждого модуля, также система роутинга своя
Есть возможность делать уобный URI для сайта например:

user/profile/register — вы хотите такой url, путь в вашей папке должен быть такой:

image

далее если для вас это слишком длинный путь, вы можете сделать его короче изменив файл Config.php:

namespace dvijok\core;
class Config {
	
	public static $useDb = true;
	public static $dbHost = 'localhost';
	public static $dbLogin = 'root';
	public static $dbPassword = '';
	public static $dbName = 'dvijok';
	public static $remaps = array(
	
		'reg' => array(
		
			'path' => 'user/profile/register',
			'lock' => true
		)
	);
	public static $db = false;
}



таким образом вам будет достаточно перейти по reg url, и сработает тот-же модуль, также есть возможность передачи параметров с помощью regexp к примеру:

namespace dvijok\core;
class Config {
	
	public static $useDb = true;
	public static $dbHost = 'localhost';
	public static $dbLogin = 'root';
	public static $dbPassword = '';
	public static $dbName = 'dvijok';
	public static $remaps = array(
	
		'reg/?(.*)' => array(
		
			'path' => 'user/profile/register/$1',
			'lock' => true
		)
	);
	public static $db = false;
}


все что идёт за слешом после reg/param1/param2/param3 — будет передаватся в параметры к модулю.

Далее у вас могут быть такие ситуации как:

namespace dvijok\core;
class Config {
	
	public static $useDb = true;
	public static $dbHost = 'localhost';
	public static $dbLogin = 'root';
	public static $dbPassword = '';
	public static $dbName = 'dvijok';
	public static $remaps = array(
	
		'register/?(.*)' => array(
		
			'path' => 'index/register',
			'lock' => true
		),
		'reg/?(.*)' => array(
		
			'path' => 'user/profile/register/$1',
			'lock' => true
		),
	);
	public static $db = false;
}

Тут важно самые длинные первые ставить, так как reg является вхождением register, но наоборот.

Далее у нас есть методы index, index_get, index_post, приоритет отдаётся последним двум, в зависимости от типа запроса, а если index_get нету, то берётся первый просто index.

Также вам нужно будет сделать валидацию формы, вам нужно-лишь вызвать метод:

$this->validator->check();

Передать ему 2 параметра, первые это сами правила, вторые это сообщения для каждого поля и правила в нём, также это проверяет если это поле является файлом с помощью тега |file|
есть много модификаторов проверки, некоторые из них связаны с таблицей, а некоторые итак работают.

После валидации у вас будут доступны в сессии 2 переменных это:

$olds = $this->session->getFlash('olds');
$errors= $this->session->getFlash('errors');

они автоматический заполняются после неуспешной валидации следовательно вы сможете их вывести во view шаблоне заполнив поля которые уже были заполнены(за исключением пароля и прочих, но их тоже можно заполнить если нужно)

public function index_post() {


	if($this->validator->check(array(
		
		'login' => 'required|exists: users,login',
		'password' => 'required',
		
	), array(
		
		'login' => array(
			
			'required' => 'login is required',
			'exists' => 'user doesn\'t exists',
		),
		'password' => array(
		
			'required' => 'password is required'
		)
		
	))){
		$post = $this->input->post();
		$user = UserModel::where('login', '=', $post['login'])->andWhere('password', '=', md5($post['password']))->first();
		$this->session->set('userId', $user->id);
		return $this->redirect('/');
	}
	return $this->redirectBack();
}

Также у вас есть 2 переменных во всём приложении это:

$this->baseUrl — берёт коренвой путь сайта вне зависимости лежит-ли он в корне http apache или-же в какой-то подпапке

$this->baseSystem — тоже самое, но это внутренний путь системный

далее

переменная $this доступна в любом шаблоне.

Например, у вас есть такой шаблон:

<?= $this->call('index/header'); />

content text

<?= $this->call('index/footer'); ?>

Делая такой вызов, вы обращаетесь к модулю index и далее контроллеру header и footer, они в свою очередь возвращают вьюху передав ей соответствующие параметры, вторым параметром к примеру.

То есть это тот-же самый путь который-бы мы использовали в url, также это можно использовать для аякс вызовов где нужно только часть html контента, также применяется правило роутинга аналогично

У каждого контроллера есть своя папке в папке views, к примеру контроллер Profile.php будет иметь папку profile, а его метод index вызывает файл с таким-же именем:

<?php

namespace dvijok\modules\test;

class Header extends \dvijok\core\Core {

	public function __construct($path, $data) {

		parent::__construct($path, $data);

	}

	public function index() {

		return $this->view(__FUNCTION__);

	}

}

Здесь мы используем константу __FUNCTION__ что равна имени функции, конечно вы можете вызвать любой другой файл в этой папке, но только в этой папке не вне неё…

Далее пример использования базы данных и моделей, модели автоматический загружаются если существуют в папке модуля:

//we can use this in any controller, to create a user
$user = new UserModel();
$user->login = 'some name'
$user->password = md5('test');
$user->created_at = time();
$user->save();
//if the user already exists it will be updated, so
$user = UserModel::where('id', '=', 1)->first();
$user->login = 'change login';
$user->save();
//or
$users = UserModel::where('name', '=', 'test')->all();
foreach($users as $user)
{
	echo $user->name;
	
}
//also we can user raw queries, but dont pass it directly in the query string
//better create an array and pass it to the second parameter, the type of the data will be checked automatically
// so dont put any quotes there, only apostrophes on the table or field names
$data = array();
$data[] = 'test'
$this->db->query("SELECT * FROM `users` WHERE `name` = ?", $data);
//to delete
$user = UserModel::where('id', '=', $id)->first();
$user->delete();

Далее пример join-a:

namespace dvijok\modules\index;
class UserModel extends \dvijok\core\Model {
	
	
	public function __construct() {
		
		parent::__construct();
		
	}
	
	function articles() {
		
		$articles = ArticleModel::where('user_id', '=', $this->id)->get();
		return $articles;
	}
}

Использовать этот фреймворк крайне легко и быстро можно создать любой сайт на свой вкус.
Метки:
php dvijok framework