Hexacore adalah kerangka kerja PHP kecil berdasarkan pola MVC. Awalnya proyek pribadi untuk meningkatkan PHP saya dengan pola desain dan fitur baru dari PHP 7.0+
Saya pikir proyek ini dapat bermanfaat bagi orang yang ingin belajar PHP dan memiliki pemahaman yang lebih baik tentang pola MVC.
Untuk penyebaran yang lebih mudah Anda dapat menggunakan Docker dan Docker-Compose:
Setelah pemasangan komposisi Docker dan Docker, Anda hanya perlu menjalankan perintah berikut di akar proyek
$ docker-compose upSitus web kemudian harus berjalan di http: // localhost.
Anda juga dapat menggunakan kerangka kerja ini dengan wamp/lamp/xamp
Setelah membuat database dengan MySQL, Anda dapat menautkannya ke kerangka kerja dengan file konkutasi yang terletak di app/config/database.json
{
"dbname" : " myDB " ,
"host" : " db " ,
"port" : 3306 ,
"user" : " hexacore " ,
"password" : " test "
}Seperti yang saya katakan sebelumnya hexacore ikuti pola MVC itu berarti bahwa aplikasi dibagi dalam 3 bagian:
Hal pertama yang harus dilakukan untuk menampilkan beranda adalah membuat indexController .
Ini adalah cara paling sederhana untuk melakukan itu:
<?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 ! " );
}
} Pengontrol harus meluas dari kelas Controller !!
Secara default indexController dan tindakan indeks (fungsi) tidak diperlukan dalam URL. Halaman beranda kemudian dapat dijangkau dengan http: // localhost dan http: // localhost/index/index. Oleh karena itu string setelah yang pertama / dalam URL merujuk ke controller dan string lainnya tindakan.
Pekerjaan bingkai memungkinkan Anda untuk memasukkan variabel mendapatkan di URL AVEC pengontrol dan tindakan seperti yang ditunjukkan di sini:
http://localhost/user/get/athena
Anda kemudian dapat menangani variabel secara langsung sebagai parameter tindakan Anda dari kelas 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 ! " );
}
}Anda dapat menambahkan parameter Get sebanyak yang Anda inginkan.
Anda juga bisa mendapatkan variabel -variabel ini dengan cara standar ( http://localhost/user/get?name=athena ) dengan objek permintaan:
<?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 menggunakan PHP juga untuk templating. Pengontrol memiliki metode terdetikat untuk memberikan tampilan dari file 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 " );
}
} Kode ini akan membuat file index.php langsung di file template base.php . Anda dapat memodifikasi file template di App/src/view/base/php .
Sebagai pengembang, Anda hanya perlu menentukan jalur file Anda (seperti yang ditunjukkan user/index.php ) tetapi juga di mana harus meletakkannya di file base.php .
Misalnya:
...
< main >
< ?php echo $block1; ? >
</ main >
...Anda dapat menggunakan hexacore untuk bertahan data. Secara default menggunakan database MySQL.
Anda dapat mengonfigurasi nama database dan akses di App/config/database.json
{
"dbname" : " myHexacoreDb " ,
"host" : " db " ,
"port" : 3306 ,
"user" : " Athena " ,
"password" : " myDatabasePassword "
}Data dari database dapat diambil di pengontrol:
<?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
]);
}
} Kelas ModelRepository akan mengembalikan objek model, dalam contoh ini model pengguna.
Untuk dapat mendapatkan semua data pengguna, Anda pertama -tama perlu membuat model. Model harus menggambarkan data yang ingin Anda simpan menggunakan properti pribadi. Model ini adalah kelas yang mengimplementasikan ManageableModelInterface . Ini memungkinkan Hexacore untuk berinteraksi dengan basis data HE melalui model ini dan dengan mudah menanganinya dengan objek yang dibuat sebelumnya seperti ModelManager .
Contoh :
<?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 ;
}
} Anda perlu membuat tabel yang sesuai di database MySQL Anda dengan bidang yang sama (di sini id dan name ) dan User nama tabel.
Kami melihat sebelumnya bahwa ModelRepository dapat digunakan untuk mengambil data dari database. Sekarang untuk membuat dan memperbarui model, kita dapat menggunakan 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 " ));
}
} Dengan ModelManager Anda juga dapat menghapus atau memperbarui model.
<?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 " );
}
}Proyek ini dikembangkan untuk bersenang -senang dan mungkin tidak diperbarui, tetapi saya melihat banyak kamar untuk perbaikan:
Untuk masa depan lebih banyak tes di beberapa lingkungan diperlukan misalnya di Nginx Web Server.
Saya juga tidak yakin bahwa AUTH dan FIREWALL akan dapat digunakan di masa depan.