Hexacore是基于MVC模式的微小PHP框架。最初,通过设计模式和PHP 7.0+的新功能改善我的PHP的个人项目
我认为该项目对于希望学习PHP并对MVC模式有更好的了解的人很有用。
为了更容易部署,您可以使用Docker和Docker-Compose:
安装Docker和Docker-Compose之后,您只需要在项目的根部执行以下命令
$ docker-compose up然后,该网站应在http:// localhost上运行。
您也可以使用Wamp/Lamp/Xamp使用此框架
使用MySQL创建数据库后,您可以将其链接到app/config/config/database.json中的constricoint文件框架。
{
"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中不需要indexController和索引操作(该功能)。然后,可以通过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 ! " );
}
}六边形也使用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 " );
}
}此代码将直接在base.php模板文件中渲染index.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类。这使得己核可以通过此模型与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 Web服务器上。
另外,我不确定Auth和Firewall将来是否可以使用。