Hexacore - это крошечная PHP -структура, основанная на рисунке MVC. Первоначально личный проект по улучшению моего PHP с помощью дизайнерских шаблонов и новых функций PHP 7.0+
Я думаю, что этот проект может быть полезен для человека, желающего изучить PHP и лучше понять шаблон MVC.
Для более легкого развертывания вы можете использовать Docker и Docker-Compose:
После установки Docker и Docker-Compose вам просто нужно выполнить следующую команду в корне проекта
$ docker-compose upЗатем веб -сайт должен работать на http: // localhost.
Вы также можете использовать эту структуру с помощью WAMP/LAMP/XAMP
После создания базы данных с MySQL вы можете связать ее с фреймворком с файлом конфигутации, расположенным в App/config/database.json
{
"dbname" : " myDB " ,
"host" : " db " ,
"port" : 3306 ,
"user" : " hexacore " ,
"password" : " test "
}Как я уже говорил ранее Hexacore, следуя шаблону MVC, это означает, что приложение разделено на 3 частях:
Первое, что нужно сделать, чтобы отобразить домашнюю страницу, - это создать indexController .
Это самый простой способ сделать это:
<?php
namespace App Controller ;
use Hexacore Core Controller ;
use Hexacore Core Response ResponseInterface ;
use Hexacore Core Response Response ;
class IndexController extends Controller
{
public function index (): ResponseInterface
{
return new Response ( " Hello world ! " );
}
} Контроллер должен пройти от класса Controller !!
По умолчанию индексконтроллер и индексное действие (функция) не нужны в URL. Домашняя страница может быть достигнута как с помощью http: // localhost, так и http: // localhost/index/index. Поэтому строка после первого / в URL относится к контроллеру, а другая строка - действие.
Работа кадров позволяет вставить переменную получить переменную в URL AVEC Контроллер и действие, как показано здесь:
http://localhost/user/get/athena
Затем вы можете обработать переменную непосредственно как параметр вашего действия получить класс UserController :
<?php
namespace App Controller ;
use Hexacore Core Controller ;
use Hexacore Core Response ResponseInterface ;
use Hexacore Core Response Response ;
class UserController extends Controller
{
public function get ( String $ name ): ResponseInterface
{
return new Response ( " Welcome $ name ! " );
}
}Вы можете добавить столько же, сколько хотите.
Вы также можете получить эти переменные с стандартным способом ( http://localhost/user/get?name=athena ) с объектом запроса:
<?php
namespace App Controller ;
use Hexacore Core Controller ;
use Hexacore Core Response ResponseInterface ;
use Hexacore Core Response Response ;
class UserController extends Controller
{
public function get (): ResponseInterface
{
//for a post variable submitted
//$this->request->getPost("var");
$ name = $ this -> request -> getQuery ( " var " );
return new Response ( " Welcome $ name ! " );
}
}Hexacore Используйте PHP также для шаблона. У контроллера есть предполагаемый метод для визуализации из файлов PHP.
<?php
namespace App Controller ;
use Hexacore Core Controller ;
use Hexacore Core Response Response ;
class UserController extends Controller
{
public function index (): Response
{
return $ this -> render ( " user/index.php " );
}
} Этот код будет отображать файл index.php непосредственно в файле шаблона base.php . Вы можете изменить файл шаблона в App/src/view/base/php .
Как разработчик, вам просто нужно указать путь вашего файла (как показано user/index.php ), но также куда поместить его в файл base.php .
Например:
...
< main >
< ?php echo $block1; ? >
</ main >
...Вы можете использовать Hexacore для постоянных данных. По умолчанию он использует базу данных MySQL.
Вы можете настроить имя базы данных и доступ в App/config/database.json
{
"dbname" : " myHexacoreDb " ,
"host" : " db " ,
"port" : 3306 ,
"user" : " Athena " ,
"password" : " myDatabasePassword "
}Данные из базы данных могут быть получены в контроллере:
<?php
namespace App Controller ;
use Hexacore Core Controller ;
use Hexacore Core Model Repository ModelRepository ;
use Hexacore Core Response ResponseInterface ;
use App Model User ;
class UserController extends Controller
{
public function index ( ModelRepository $ modelRepository ): ResponseInterface
{
// to get all users
$ allUsers = $ modelRepository -> setModel (User::class)-> findAll ();
// to get the user with the id 1
$ user = $ modelRepository -> findById ( 1 );
return $ this -> render ( " user/index.php " , [
" users " => $ allUsers ,
" user " => $ user
]);
}
} Класс ModelRepository вернет модель объекта, в этом примере пользовательская модель.
Чтобы иметь возможность получить все данные пользователей, вам сначала нужно создать модель. Модель должна описать данные, которые вы хотите сохранить, используя частные свойства. Модель - это класс, который реализует ManageableModelInterface . Это позволяет Hexacore взаимодействовать с базой данных HE через эту модель и легко обрабатывать ее с предварительно созданным объектом, таким как ModelManager .
Пример :
<?php
namespace App Model ;
use Hexacore Core Model ManageableModelInterface ;
class User implements ManageableModelInterface
{
private $ id ;
private $ name ;
public function getId () : ? int
{
return $ this -> id ;
}
public function setId ( int $ id ) : ManageableModelInterface
{
$ this -> id = $ id ;
return $ this ;
}
} Вам необходимо создать соответствующую таблицу в базе данных MySQL с теми же полями (здесь id и name ) и User таблицы.
Ранее мы видели, что ModelRepository может быть использован для извлечения данных из базы данных. Теперь, чтобы создать и обновить модель, мы можем использовать ModelManager.
<?php
namespace App Controller ;
use Hexacore Core Controller ;
use Hexacore Core Model Manager ModelManager ;
use Hexacore Core Response ResponseInterface ;
use Hexacore Core Response Redirect RedirectionResponse ;
use Hexacore Helpers Url ;
use App Model User ;
class UserController extends Controller
{
public function create ( ModelManager $ modelManager , string $ name , Url $ url ): ResponseInterface
{
// create a new user with a personal name
$ user = new User ();
$ user -> setName ( $ name );
// actually insert the new user in the database
$ modelManager -> persist ( $ user );
// redirection to another page
return new RedirectionResponse ( $ url -> baseUrl ( " user " ));
}
} С ModelManager вы также можете удалить или обновить модель.
<?php
namespace App Controller ;
use Hexacore Core Controller ;
use Hexacore Core Model Manager ModelManager ;
use Hexacore Core Response ResponseInterface ;
use App Model User ;
class UserController extends Controller
{
/**
* For a resource like : user/update/{id}/{name}
* Example of the query :
* http://www.yourwebsite.com/user/update/1/zeus
*/
public function update ( ModelManager $ modelManager , User $ user , string $ name ): ResponseInterface
{
// the $user value will be a User object with data from the user number id
// we change the user name
$ user -> setName ( $ name );
// we persist this change in the database
$ modelManager -> persist ( $ user );
return new Response ( " User updated " );
}
/**
* For a resource like : user/delete/{id}
* Example of the query :
* http://www.yourwebsite.com/user/delete/1
*/
public function delete ( ModelManager $ modelManager , User $ user ): ResponseInterface
{
// again $user will be a User Model corresponding to the user with
// the id, 1 in the example.
// delete a specific user in the database
$ modelManager -> delete ( $ user );
return new Response ( " User deleted " );
}
}Этот проект разработан для развлечения и не может быть обновлен, но я вижу много комнат для улучшения:
Для будущего тестирование в нескольких средах требуется, например, на веб -сервере Nginx.
Кроме того, я не уверен, что Auth и Firewall будут пригодны для использования в будущем.