Pull to refresh

Оценка фреймворка «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;
	}
}

Использовать этот фреймворк крайне легко и быстро можно создать любой сайт на свой вкус.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.