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將來是否可以使用。