Сразу к делу. Собственно, сразу дам ссылку — это модульный движок на основе mvc внутри каждого модуля, также система роутинга своя
Есть возможность делать уобный URI для сайта например:
user/profile/register — вы хотите такой url, путь в вашей папке должен быть такой:
далее если для вас это слишком длинный путь, вы можете сделать его короче изменив файл Config.php:
namespace dvijokcore;
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 dvijokcore;
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 dvijokcore;
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 dvijokmodulestest;
class Header extends dvijokcoreCore {
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 dvijokmodulesindex;
class UserModel extends dvijokcoreModel {
public function __construct() {
parent::__construct();
}
function articles() {
$articles = ArticleModel::where('user_id', '=', $this->id)->get();
return $articles;
}
}
Использовать этот фреймворк крайне легко и быстро можно создать любой сайт на свой вкус.
Автор: мастер слога