Pilihan yang baik untuk memulai proyek PHP, ini dapat digunakan untuk pengembangan Web dan API. Hanya perlu satu menit untuk memulai proyek. Ini memiliki kinerja super tinggi dan pengalaman pengembangan yang sangat mudah digunakan. Tidak ada konsep yang rumit, sehingga memiliki kurva belajar terendah.
composer create-project amazephp/amazephp
Atau gunakan git clone:
git clone https://github.com/w3yyb/AmazePHP.git
cd AmazePHP
composer install
cd public/
php -S localhost:9080 server.php
Buka http: // localhost: 9080 di browser Anda.
PHP 8.1+
Direktori Aplikasi berisi kode inti aplikasi Anda. Kami akan segera menjelajahi direktori ini secara lebih rinci; Namun, hampir semua kelas dalam aplikasi Anda akan ada di direktori ini.
Direktori Config, sesuai namanya, berisi semua file konfigurasi aplikasi Anda. Sertakan file konfigurasi rute.
Helper berfungsi di dalamnya.
Direktori Inti Kerangka, termasuk beberapa kelas LIB. Dan Anda dapat memasukkan file kelas Anda di dalamnya.
Direktori publik berisi file index.php, yang merupakan titik masuk untuk semua permintaan yang memasukkan aplikasi Anda dan mengkonfigurasi autoloading. Direktori ini juga menampung aset Anda seperti gambar, JavaScript, dan CSS.
Direktori cache berisi file cache Anda, sertakan file log.
Direktori Template berisi file template HTML Anda.
config('app'); //will read config/app.php, app.php return an array.
config('app.url')// == config('app')['url'];
// Retrieve a default value if the configuration value does not exist...
$value = config('app.timezone', 'Asia/Seoul');
Untuk mengatur nilai konfigurasi saat runtime, berikan array ke fungsi konfigurasi:
config(['app.timezone' => 'America/Chicago']);
$value = cache('key');
cache(['key' => 'value'], 10);// Expires after 10 seconds
Mesin template menggunakan BladeOne , mesin templat yang mirip dengan Laravel blade , klik di sini https://github.com/eftec/bladeone/wiki/bladeone-manual Lihat Manual BladeOne.
echo view('greeting', ['name' => 'James']);
Parameter pertama adalah nama templat, yaitu template/greeting.blade.php .
env('key');
env('key','default');
Nilai kedua yang diteruskan ke fungsi Env adalah "nilai default". Nilai ini akan dikembalikan jika tidak ada variabel lingkungan untuk kunci yang diberikan.
logger('some msg');//error log
logger('some msg','warning'); //warning log | support:emergency ,alert ,critical ,error ,warning ,notice ,info ,debug
Lihat config/route.php
[
['GET'],
'/',
[AppControllersIndex::class, 'index'],
'routename',
'middleware'=>[AppMiddlewarea2Middleware::class,AppMiddlewareb2Middleware::class],
],
Baris pertama adalah metode permintaan HTTP, yang mendukung Head, Get, Post, Put, Patch, Delete. ['POST,GET'] berarti bahwa kedua pos dan dapatkan didukung. ['*'] menunjukkan bahwa semua metode HTTP didukung.
Baris kedua mewakili jalur, seperti /users/{uid}/posts/[{pid}][/] : Dalam kawat gigi curly adalah parameter variabel, parameter opsional dalam kurung, yaitu parameter yang belum lewat di URL, [/] untuk menghapus tebasan trailing.
Baris ketiga menunjukkan panggilan balik PHP, dukungan untuk metode kelas, metode statis kelas, fungsi anonim, fungsi, dll.
Baris keempat adalah opsional dan menunjukkan nama rute yang disebutkan.
Kunci middleware adalah middleware routing register opsional.
Kelas AmazePhp Request menyediakan cara berorientasi objek untuk berinteraksi dengan permintaan HTTP saat ini ditangani oleh aplikasi Anda serta mengambil input, cookie, dan file yang dikirimkan dengan permintaan tersebut.
$input = request()->all();
$name = request()->input('name');
$value = request()->cookie('name');
$value = request()->header('X-Header-Name');
$method = request()->method();
request()->host();
$url = request()->url();
$urlWithQueryString = request()->fullUrl();
$uri = request()->path();
if (request()->is('admin/*')) {
// ...
}
$input = request()->only(['username', 'password']);
$input = request()->except(['credit_card']);
$file = request()->file('upload');
if ($file && $file->isValid()) {
$file->move(PUBLIC_PATH.'/myfile.'.$file->getUploadExtension());
return json(['code' => 0, 'msg' => 'upload success']);
}
Lebih Banyak Penggunaan Lihat Amazefp/Src/Request.php.
AmazEphp tidak menyediakan kelas respose untuk alasan kinerja. Gunakan fungsi header () dan gema atau kembali ke respons di pengontrol atau middleware.
Alih -alih mendefinisikan semua permintaan penanganan logika Anda sebagai penutupan dalam file rute Anda, Anda mungkin ingin mengatur perilaku ini menggunakan kelas "controller". Pengontrol dapat mengelompokkan permintaan penanganan permintaan terkait ke dalam satu kelas. Misalnya, kelas UserController mungkin menangani semua permintaan yang masuk yang terkait dengan pengguna, termasuk menunjukkan, membuat, memperbarui, dan menghapus pengguna. Secara default, pengontrol disimpan di direktori app/Controllers .
Di app/Controllers Dir, Anda dapat menulis beberapa pengontrol, misalnya:
<?php
namespace AppControllers;
class Index
{
public function index()
{
echo 'Hello AmazePHP!';
}
}
Setelah Anda menulis kelas dan metode pengontrol, Anda dapat mendefinisikan rute ke metode pengontrol seperti itu:
[
['GET'],
'/',
[AppControllersIndex::class, 'index']
],
Ketika permintaan yang masuk cocok dengan rute yang ditentukan URI, metode indeks pada kelas controllers index akan dipanggil dan parameter rute akan diteruskan ke metode.
Middleware, juga dikenal sebagai HTTP Middleware, terutama digunakan untuk memodifikasi atau memfilter permintaan atau respons HTTP. Semua middleware ini terletak di direktori aplikasi/middleware.
Middleware dibagi menjadi sebelum middleware dan setelah middleware. Sebelum middleware terutama digunakan untuk memodifikasi permintaan HTTP. Setelah middleware terutama digunakan untuk memodifikasi respons HTTP.
Request->Before middleware->Actual action->After middleware->Response
Perbedaan utama antara sebelum middleware dan setelah middleware adalah tempat kode dieksekusi. Di Direktori Aplikasi/Middleware:
Buat seperti bmiddleware.php
<?php
namespace AppMiddleware;
use AmazePHPMiddlewareInterface;
class bMiddleware implements MiddlewareInterface {
public function process($object, Closure $next,...$params)
{
//Perform some logic here
return $next($object);
}
}
?>
Buat seperti amiddleware.php
<?php
namespace AppMiddleware;
use AmazePHPMiddlewareInterface;
class aMiddleware implements MiddlewareInterface {
public function process($object, Closure $next,...$params)
{
$response = $next($object);
//Perform some logic here
return $response;
}
}
?>
Di config/middleware.php, tulis yang berikut:
return [
AppMiddlewareaMiddleware::class,
AppMiddlewarebMiddleware::class,
];
Lihat Routing.
Façade menyediakan antarmuka panggilan statis untuk kelas (dinamis) dari perpustakaan kelas inti kerangka kerja. Mengaktifkan Anda untuk secara statis memanggil metode kelas dinamis.
Di App Controllers Index Controller:
<?php
namespace AppControllers;
use AmazePHPFacadeRequest;
class Index
{
public function index()
{
echo Request::url();//call Request.php url method statically. Same as calling Request->url().
}
}
Semua fasad sistem ditempatkan di Direktori AmazEPHP/SRC/Fasad.
Container adalah alat yang ampuh untuk mengelola dependensi kelas dan melakukan injeksi ketergantungan.
Misalnya:
<?php
namespace AppControllers;
use AmazePHPRequest;
class Foo
{
public function bar(Request $request, $id)
{
echo $request->url();
}
}
?>
Metode bilah tergantung pada kelas permintaan. Anda dapat memasukkan permintaan $ permintaan di parameter bar. Framework akan secara otomatis menelepon kelas permintaan, sehingga Anda dapat menggunakan metode kelas permintaan: misalnya $request->url() .
Skenario yang mendukung penggunaan injeksi ketergantungan termasuk (tetapi tidak terbatas pada):
$response= httpGet('http://httpbin.org/get');
$response= httpGet('http://httpbin.org/get',['headername'=>'headervalue']);
$response= httpHead('http://httpbin.org/get',['headername'=>'headervalue']);
$response= httpDelete('http://httpbin.org/delete',['headername'=>'headervalue']);
$response= httpPost('http://httpbin.org/post',['senddataname'=>'senddatavalue']);
$response= httpPut('http://httpbin.org/put',['senddataname'=>'senddatavalue']);
$response= httpPatch('http://httpbin.org/patch',['senddataname'=>'senddatavalue']);
$ Response adalah array yang berisi data status_code, header, dan tubuh.
Parameter fungsi adalah sebagai berikut:
httpGet($url,$header = [])
httpHead($url,$header = [])
httpDelete($url,$header = [])
httpPost($url, $data, $isJson = true,$method='POST',$header = [])
httpPut($url, $data, $isJson = true,$method='PUT',$header = [])
httpPatch($url, $data, $isJson = true,$method='PATCH',$header = [])
Sesi ditutup secara default, jika Anda ingin membuka, silakan ubah session_enable di file .env menjadi true.
session(["name" => "value"]);
$value = session('name')
$value = request()->cookie('name');
cookie('name','value',86400); // 86400 seconds
Komponen database menggunakan PdoOne , pembungkus objek akses basis data untuk PHP dan PDO. Klik https://github.com/eftec/pdoone untuk melihat cara menggunakannya.
Di bawah ini adalah contoh cara menggunakannya dengan cara yang sederhana.
memilih:
$results = db()->select("*")->from('users')->where("name like '%test%'")->toList();
print_r($results);
Gunakan SQL mentah:
$sql='select * from users where id=1';
$pdoStatement=db()->runRawQuery($sql,[],false); // [] are the parameters
print_r($pdoStatement->fetchAll());
menyisipkan:
db()->insert("users"
,['name','email','password']
,['kevin','[email protected]','123456']);
memperbarui:
db()->update("users"
,['name'=>'Captain-Crunch','email'=>'[email protected]'] // set
,['id'=>6]); // where
menghapus:
db()->delete("users"
,['id'=>6]); // where
// Get the current URL without the query string...
echo url()->current();
// Get the current URL including the query string...
echo url()->full();
// Get the full URL for the previous request...
echo url()->previous();
echo url("/posts/{$post->id}"); // http://example.com/posts/1
[
['GET'],
'/hello/{id}/foo/{sid}',
[new AppFoo, 'bar'],
'nameroute1'//Named Route
],
echo route('nameroute1', ['id' => 1, 'sid' => 2]);
// http://example.com/hello/1/foo/2
Jika Anda ingin menggunakannya, pertama -tama aktifkan sesi.
Permintaan lintas-situs Forgeries adalah jenis eksploitasi jahat di mana perintah tidak sah dilakukan atas nama pengguna yang diautentikasi. Untungnya, AmazEPHP memudahkan untuk melindungi aplikasi Anda dari serangan Cross-Site Request Facty (CSRF).
AmazEphp secara otomatis menghasilkan "token" CSRF untuk setiap sesi pengguna aktif yang dikelola oleh aplikasi. Token ini digunakan untuk memverifikasi bahwa pengguna yang diautentikasi adalah orang yang benar -benar membuat permintaan ke aplikasi. Karena token ini disimpan dalam sesi pengguna dan berubah setiap kali sesi diregenerasi, aplikasi jahat tidak dapat mengaksesnya.
Token CSRF sesi saat ini dapat diakses melalui fungsi Helper csrf_token :
$token = csrf_token();
Kapan saja Anda mendefinisikan "postingan", "put", "patch", atau "hapus" formulir HTML dalam aplikasi Anda, Anda harus menyertakan bidang CSRF _token tersembunyi dalam formulir sehingga middleware perlindungan CSRF dapat memvalidasi permintaan. Untuk kenyamanan, Anda dapat menggunakan arahan Blade @csrf untuk menghasilkan bidang input token tersembunyi:
<form method="POST" action="/profile">
@csrf
<!-- Equivalent to... -->
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
Selain memeriksa token CSRF sebagai parameter POST, libVerifyCsrfToken juga akan memeriksa header permintaan X-CSRF-TOKEN . Anda bisa, misalnya, menyimpan token dalam tag meta HTML:
<meta name="csrf-token" content="{{ csrf_token() }}">
Kemudian, Anda dapat menginstruksikan perpustakaan seperti jQuery untuk secara otomatis menambahkan token ke semua header permintaan. Ini memberikan perlindungan CSRF yang sederhana dan nyaman untuk aplikasi berbasis AJAX Anda menggunakan teknologi JavaScript Legacy:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
AmazEphp menyimpan token CSRF saat ini dalam cookie XSRF-TOKEN terenkripsi yang disertakan dengan setiap respons yang dihasilkan oleh kerangka kerja. Anda dapat menggunakan nilai cookie untuk mengatur header permintaan X-XSRF-TOKEN .
Cookie ini terutama dikirim sebagai kenyamanan pengembang karena beberapa kerangka kerja dan perpustakaan JavaScript, seperti Angular dan Axios, secara otomatis menempatkan nilainya di header X-XSRF-TOKEN pada permintaan asal yang sama.
./phpunit --bootstrap vendor/autoload.php tests
./phpunit --bootstrap vendor/autoload.php tests --display-warnings
./phpunit --bootstrap vendor/autoload.php tests --display-deprecations
Amazephp sekitar 9x lebih cepat dari Laravel di hello world Benchmark.
Laravel: 2900 RPS.
Amazefp: 23000 RPS.
Baik debug terbuka, dan Laravel menggunakan driver sesi array.