PHPプロジェクトを開始するのに適した選択肢は、WebおよびAPI開発に使用できます。プロジェクトを開始するのに1分しかかかりません。それは非常に高いパフォーマンスと非常に使いやすい開発体験を持っています。複雑な概念はないため、学習曲線が最も低くなっています。
composer create-project amazephp/amazephp
またはGitクローンを使用します。
git clone https://github.com/w3yyb/AmazePHP.git
cd AmazePHP
composer install
cd public/
php -S localhost:9080 server.php
ブラウザでhttp:// localhost:9080を開きます。
PHP 8.1+
アプリディレクトリには、アプリケーションのコアコードが含まれています。このディレクトリについては、すぐに詳しく説明します。ただし、アプリケーション内のほとんどすべてのクラスはこのディレクトリにあります。
名前が示すように、構成ディレクトリには、アプリケーションのすべての構成ファイルが含まれています。ルート構成ファイルを含めます。
ヘルパーが機能します。
フレームワークコアディレクトリには、LIBクラスが含まれています。また、クラスファイルを入れることができます。
Public Directoryにはindex.phpファイルが含まれています。これは、アプリケーションを入力して自動装置を構成するすべてのリクエストのエントリポイントです。このディレクトリには、画像、JavaScript、CSSなどの資産もあります。
キャッシュディレクトリには、キャッシュファイルが含まれており、ログファイルが含まれています。
テンプレートディレクトリには、HTMLテンプレートファイルが含まれています。
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');
実行時に構成値を設定するには、構成関数に配列を渡します。
config(['app.timezone' => 'America/Chicago']);
$value = cache('key');
cache(['key' => 'value'], 10);// Expires after 10 seconds
テンプレートエンジンは、Laravel bladeに似たテンプレートエンジンであるBladeOneを使用します。ここをクリックhttps://github.com/eftec/bladeone/wiki/bladeone-manual Bladeoneマニュアル。
echo view('greeting', ['name' => 'James']);
最初のパラメーターはテンプレート名、つまりtemplate/greeting.blade.phpで、2番目のパラメーターはテンプレートに渡される変数です。
env('key');
env('key','default');
ENV関数に渡される2番目の値は、「デフォルト値」です。指定されたキーの環境変数が存在しない場合、この値は返されます。
logger('some msg');//error log
logger('some msg','warning'); //warning log | support:emergency ,alert ,critical ,error ,warning ,notice ,info ,debug
config/route.phpを参照してください
[
['GET'],
'/',
[AppControllersIndex::class, 'index'],
'routename',
'middleware'=>[AppMiddlewarea2Middleware::class,AppMiddlewareb2Middleware::class],
],
最初の行は、HTTPリクエストメソッドです。これは、ヘッド、ゲット、ポスト、プット、パッチ、削除をサポートします。 ['POST,GET']ポストとgetの両方がサポートされていることを意味します。 ['*']すべてのHTTPメソッドがサポートされていることを示します。
2番目の行は、 /users/{uid}/posts/[{pid}][/]のようなパスを表します。カーリーブレースは、ブラケットのオプションパラメーター、つまりURLに渡されていないパラメーター、 [/]を表します。
3行目は、PHPコールバック、クラスメソッドのサポート、クラスの静的な方法、匿名関数、関数などを示します。
4行目はオプションで、名前付きルートの名前を示します。
ミドルウェアキーは、オプションのレジスタルーティングミドルウェアです。
AmazePhp requestクラスは、アプリケーションで処理されている現在のHTTP要求と対話するオブジェクト指向の方法を提供し、リクエストで送信された入力、Cookie、およびファイルを取得します。
$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']);
}
より多くの使用法は、Amazephp/src/request.phpを参照してください。
Amazephpは、パフォーマンス上の理由で呼吸クラスを提供しません。 Header()FuncionとEchoを使用するか、コントローラーまたはミドルウェアで応答します。
ルートファイルの閉鎖としてすべての要求処理ロジックを定義する代わりに、「コントローラー」クラスを使用してこの動作を整理することをお勧めします。コントローラーは、関連するリクエスト処理ロジックを単一のクラスにグループ化できます。たとえば、 UserControllerクラスは、ユーザーの表示、作成、更新、削除など、ユーザーに関連するすべての着信要求を処理する場合があります。デフォルトでは、コントローラーはapp/Controllersディレクトリに保存されます。
app/Controllers dirで、たとえば、いくつかのコントローラーを書くことができます。
<?php
namespace AppControllers;
class Index
{
public function index()
{
echo 'Hello AmazePHP!';
}
}
コントローラーのクラスとメソッドを作成したら、次のようなコントローラーメソッドへのルートを定義できます。
[
['GET'],
'/',
[AppControllersIndex::class, 'index']
],
着信要求が指定されたルートURIと一致する場合、App Controllers Indexクラスのインデックスメソッドが呼び出され、ルートパラメーターがメソッドに渡されます。
HTTPミドルウェアとも呼ばれるミドルウェアは、主にHTTP要求または応答の変更またはフィルタリングに使用されます。これらのミドルウェアのすべては、アプリ/ミドルウェアディレクトリにあります。
ミドルウェアは、ミドルウェアの前とミドルウェアの後に分割されます。主にHTTP要求を変更するためにミドルウェアが使用される前に。ミドルウェアの後、主にHTTP応答を変更するために使用されます。
Request->Before middleware->Actual action->After middleware->Response
ミドルウェアの前とミドルウェア後の主な違いは、コードが実行される場所です。アプリ/ミドルウェアディレクトリ:
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);
}
}
?>
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;
}
}
?>
config/middleware.phpで、以下を書きます。
return [
AppMiddlewareaMiddleware::class,
AppMiddlewarebMiddleware::class,
];
ルーティングを参照してください。
ファサードは、フレームワークのコアクラスライブラリの(動的)クラスの静的コールインターフェイスを提供します。動的クラスメソッドを静的に呼び出すことができます。
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().
}
}
システムのすべてのファサードは、Amazephp/SRC/Facade Directoryに配置されています。
コンテナは、クラスの依存関係を管理し、依存関係噴射を実行するための強力なツールです。
例えば:
<?php
namespace AppControllers;
use AmazePHPRequest;
class Foo
{
public function bar(Request $request, $id)
{
echo $request->url();
}
}
?>
barメソッド$request->url()リクエストクラスに依存します。barパラメーターにリクエスト$ requestを配置できます。フレームワークはリクエストクラスを自動呼びます。
依存関係の注入の使用をサポートするシナリオには、次のものが含まれます(ただし、これらに限定されません)。
$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は、Status_Code、ヘッダー、およびボディデータを含む配列です。
関数パラメーターは次のとおりです。
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 = [])
セッションはデフォルトで閉じられます。開く場合は、.envファイルのsession_enableをtrueに変更してください。
session(["name" => "value"]);
$value = session('name')
$value = request()->cookie('name');
cookie('name','value',86400); // 86400 seconds
データベースコンポーネントは、PHPおよびPDOのデータベースアクセスオブジェクトラッパーであるPdoOneを使用しています。 https://github.com/eftec/pdooneをクリックして、使用方法を確認します。
以下は、簡単な方法で使用する方法の例です。
選択:
$results = db()->select("*")->from('users')->where("name like '%test%'")->toList();
print_r($results);
RAW SQLを使用してください:
$sql='select * from users where id=1';
$pdoStatement=db()->runRawQuery($sql,[],false); // [] are the parameters
print_r($pdoStatement->fetchAll());
入れる:
db()->insert("users"
,['name','email','password']
,['kevin','[email protected]','123456']);
アップデート:
db()->update("users"
,['name'=>'Captain-Crunch','email'=>'[email protected]'] // set
,['id'=>6]); // where
消去:
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
使用する場合は、最初にセッションを有効にします。
クロスサイトリクエストのフォージェリーは、認証されたユーザーに代わって不正なコマンドを実行する悪意のあるエクスプロイトの一種です。ありがたいことに、Amazephpは、クロスサイトリクエストフォーファリー(CSRF)攻撃からアプリケーションを簡単に保護できます。
AmazePhpは、アプリケーションによって管理されているアクティブユーザーセッションごとにCSRF「トークン」を自動的に生成します。このトークンは、認証されたユーザーが実際にアプリケーションにリクエストを行っている人であることを確認するために使用されます。このトークンはユーザーセッションに保存され、セッションが再生されるたびに変更されるため、悪意のあるアプリケーションにアクセスできません。
現在のセッションのCSRFトークンには、 csrf_tokenヘルパー関数を介してアクセスできます。
$token = csrf_token();
アプリケーションに「投稿」、「Put」、「Put」、「Patch」、または「Delete」HTMLフォームを定義するときはいつでも、CSRF保護ミドルウェアがリクエストを検証できるように、フォームに非表示のCSRF _tokenフィールドを含める必要があります。便利なため、 @csrfブレードディレクティブを使用して、非表示のトークン入力フィールドを生成できます。
<form method="POST" action="/profile">
@csrf
<!-- Equivalent to... -->
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
CSRFトークンを投稿パラメーターとしてチェックすることに加えて、 libVerifyCsrfToken X-CSRF-TOKENリクエストヘッダーも確認します。たとえば、トークンをHTML metaに保存できます。
<meta name="csrf-token" content="{{ csrf_token() }}">
次に、jQueryのようなライブラリに指示して、すべてのリクエストヘッダーにトークンを自動的に追加することができます。これにより、Legacy JavaScriptテクノロジーを使用して、AJAXベースのアプリケーションにシンプルで便利なCSRF保護を提供します。
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
Amazephpは、フレームワークによって生成された各応答に含まれる暗号化されたXSRF-TOKEN Cookieに現在のCSRFトークンを保存します。 Cookie値を使用して、 X-XSRF-TOKENリクエストヘッダーを設定できます。
このCookieは、AngularやAxiosなどの一部のJavaScriptフレームワークとライブラリが同性の要求に応じてX-XSRF-TOKENヘッダーに自動的に値を配置するため、主に開発者の利便性として送信されます。
./phpunit --bootstrap vendor/autoload.php tests
./phpunit --bootstrap vendor/autoload.php tests --display-warnings
./phpunit --bootstrap vendor/autoload.php tests --display-deprecations
Amazephpはhello world BenchmarkのLaravelよりも約9倍高速です。
Laravel:2900 rps。
Amazephp:23000 rps。
どちらもオープンデバッグを使用し、Laravelは配列セッションドライバーを使用します。