PHP 프로젝트를 시작하기에 좋은 선택으로 웹 및 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 클래스가 포함되어 있습니다. 클래스 파일을 넣을 수 있습니다.
공개 디렉토리에는 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/bladeon-manual Bladeone 매뉴얼보기.
echo view('greeting', ['name' => 'James']);
첫 번째 매개 변수는 템플릿 이름 (예 : template/greeting.blade.php )이며 두 번째 매개 변수는 템플릿에 전달되는 변수입니다.
env('key');
env('key','default');
ENV 함수로 전달 된 두 번째 값은 "기본값"입니다. 주어진 키에 대해 환경 변수가 존재하지 않으면이 값이 반환됩니다.
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],
],
첫 번째 줄은 Head, Get, Post, Put, Patch, Delete를 지원하는 HTTP 요청 방법입니다. ['POST,GET'] 게시물과 get가 모두 지원되었음을 의미합니다. ['*'] 모든 HTTP 방법이 지원되었음을 나타냅니다.
두 번째 줄은 /users/{uid}/posts/[{pid}][/] 와 같은 경로를 나타냅니다. 곱슬 브레이스에서는 가변 매개 변수, 브래킷의 선택적 매개 변수, 즉 트레일 슬래시를 제거하기 위해 URL에서 전달되지 않은 매개 변수 [/] 입니다.
세 번째 줄은 PHP 콜백, 클래스 방법에 대한 지원, 정적 클래스 방법, 익명 함수, 기능 등을 나타냅니다.
네 번째 줄은 선택 사항이며 이름이 지정된 경로의 이름을 나타냅니다.
미들웨어 키는 선택적 레지스터 라우팅 미들웨어입니다.
Amazephp Request Class는 응용 프로그램에서 처리하는 현재 HTTP 요청과 상호 작용하는 객체 지향 방법을 제공 할뿐만 아니라 요청과 함께 제출 된 입력, 쿠키 및 파일을 검색합니다.
$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은 공연상의 이유로 Respose 클래스를 제공하지 않습니다. 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 Middleware라고도하는 미들웨어는 주로 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 디렉토리에 배치됩니다.
컨테이너는 클래스 종속성을 관리하고 종속성 주입을 수행하기위한 강력한 도구입니다.
예를 들어:
<?php
namespace AppControllers;
use AmazePHPRequest;
class Foo
{
public function bar(Request $request, $id)
{
echo $request->url();
}
}
?>
막대 메소드는 요청 클래스에 따라 달라집니다. 요청 $ 요청을 막대 매개 변수에 넣을 수 있습니다 .Framework는 요청 클래스를 자동으로 호출하므로 요청 클래스 메소드를 사용할 수 있습니다 : eg $request->url() .
의존성 주입의 사용을 지원하는 시나리오에는 다음이 포함됩니다 (그러나 제한되지는 않음).
$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']);
$ 응답은 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 (Cross-Site Request Grospory) 공격으로부터 응용 프로그램을 쉽게 보호 할 수 있습니다.
Amazephp는 응용 프로그램에서 관리하는 각 활성 사용자 세션에 대해 CSRF "토큰"을 자동으로 생성합니다. 이 토큰은 인증 된 사용자가 실제로 응용 프로그램에 요청하는 사람인지 확인하는 데 사용됩니다. 이 토큰은 사용자 세션에 저장되며 세션이 재생 될 때마다 변경되므로 악의적 인 응용 프로그램에 액세스 할 수 없습니다.
현재 세션의 CSRF 토큰은 csrf_token 헬퍼 기능을 통해 액세스 할 수 있습니다.
$token = csrf_token();
응용 프로그램에서 "Post", "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와 같은 라이브러리에 모든 요청 헤더에 토큰을 자동으로 추가하도록 지시 할 수 있습니다. 이는 레거시 JavaScript 기술을 사용하여 AJAX 기반 응용 프로그램에 대한 간단하고 편리한 CSRF 보호 기능을 제공합니다.
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
Amazephp은 현재 CSRF 토큰을 프레임 워크에 의해 생성 된 각 응답에 포함 된 암호화 된 XSRF-TOKEN 쿠키에 저장합니다. 쿠키 값을 사용하여 X-XSRF-TOKEN 요청 헤더를 설정할 수 있습니다.
이 쿠키는 주로 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은 배열 세션 드라이버를 사용합니다.