Un bon choix pour démarrer un projet PHP, il peut être utilisé pour le développement Web et API. Il ne faut qu'une minute pour démarrer un projet. Il a des performances très élevées et une expérience de développement très facile à utiliser. Il n'y a pas de concepts compliqués, il a donc la courbe d'apprentissage la plus basse.
composer create-project amazephp/amazephp
ou utilisez Git Clone:
git clone https://github.com/w3yyb/AmazePHP.git
cd AmazePHP
composer install
cd public/
php -S localhost:9080 server.php
Ouvrez http: // localhost: 9080 dans votre navigateur.
PHP 8.1+
Le répertoire de l'APP contient le code de base de votre application. Nous explorerons ce répertoire plus en détail bientôt; Cependant, presque toutes les classes de votre application seront dans ce répertoire.
Le répertoire de configuration, comme le nom l'indique, contient tous les fichiers de configuration de votre application. Incluez le fichier de configuration d'itinéraire.
L'assistance y fonctionne.
Le répertoire de base Framework, inclut une classe Lib. Et vous pouvez y mettre votre fichier de classe.
Le répertoire public contient le fichier index.php, qui est le point d'entrée pour toutes les demandes entrant dans votre application et configure la mise au point automatique. Ce répertoire abrite également vos actifs tels que des images, JavaScript et CSS.
Le répertoire de cache contient vos fichiers de cache, inclut les fichiers journaux.
Le répertoire de modèle contient vos fichiers de modèle 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');
Pour définir les valeurs de configuration à l'exécution, passez un tableau à la fonction de configuration:
config(['app.timezone' => 'America/Chicago']);
$value = cache('key');
cache(['key' => 'value'], 10);// Expires after 10 seconds
Le moteur du modèle utilise BladeOne , un moteur de modèle similaire à la blade Laravel, cliquez ici https://github.com/eftec/bladeone/wiki/Bladeone-Manual Voir le manuel Bladeone.
echo view('greeting', ['name' => 'James']);
Le premier paramètre est le nom du modèle, ie template/greeting.blade.php , et le deuxième paramètre est la variable transmise dans le modèle.
env('key');
env('key','default');
La deuxième valeur transmise à la fonction Env est la "valeur par défaut". Cette valeur sera renvoyée si aucune variable d'environnement n'existe pour la clé donnée.
logger('some msg');//error log
logger('some msg','warning'); //warning log | support:emergency ,alert ,critical ,error ,warning ,notice ,info ,debug
Voir config / Route.php
[
['GET'],
'/',
[AppControllersIndex::class, 'index'],
'routename',
'middleware'=>[AppMiddlewarea2Middleware::class,AppMiddlewareb2Middleware::class],
],
La première ligne est la méthode de demande HTTP, qui prend en charge la tête, l'obtention, la publication, le put, le patch, la suppression. ['POST,GET'] signifie que la publication et le grenage sont prises en charge. ['*'] indique que toutes les méthodes HTTP sont prises en charge.
La deuxième ligne représente le chemin d'accès, comme /users/{uid}/posts/[{pid}][/] : dans les accolades bouclées sont des paramètres variables, des paramètres facultatifs entre parenthèses, c'est-à-dire des paramètres qui ne sont pas passés dans l'URL, [/] pour supprimer la barre de suite.
La troisième ligne indique des rappels PHP, une prise en charge des méthodes de classe, des méthodes statiques de classes, des fonctions anonymes, des fonctions, etc.
La quatrième ligne est facultative et indique le nom de la route nommée.
La touche middleware est le middleware de routage de registre facultatif.
La classe AmazEphp Request fournit un moyen orienté objet d'interagir avec la demande HTTP actuelle gérée par votre application ainsi que de récupérer l'entrée, les cookies et les fichiers soumis avec la demande.
$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']);
}
Plus d'utilisation Voir AmazEphp / Src / Request.php.
AmazoPHP ne fournit pas de classe de consommation pour des raisons de performance. Utilisez en tête () Funcion et en écho ou revenez à la réponse dans les contrôleurs ou le middleware.
Au lieu de définir toute votre logique de gestion de demande en tant que fermetures dans vos fichiers d'itinéraire, vous souhaiterez peut-être organiser ce comportement à l'aide de classes "Controller". Les contrôleurs peuvent regrouper la logique de traitement des demandes liées en une seule classe. Par exemple, une classe UserController peut gérer toutes les demandes entrantes liées aux utilisateurs, y compris l'affichage, la création, la mise à jour et la suppression des utilisateurs. Par défaut, les contrôleurs sont stockés dans le répertoire app/Controllers .
Dans app/Controllers DIR, vous pouvez écrire certains contrôleurs, par exemple:
<?php
namespace AppControllers;
class Index
{
public function index()
{
echo 'Hello AmazePHP!';
}
}
Une fois que vous avez écrit une classe et une méthode de contrôleur, vous pouvez définir un itinéraire vers la méthode du contrôleur comme ça:
[
['GET'],
'/',
[AppControllersIndex::class, 'index']
],
Lorsqu'une demande entrante correspond à l'URI de route spécifiée, la méthode d'index sur la classe App Controllers Index sera invoquée et les paramètres de route seront transmis à la méthode.
Le middleware, également connu sous le nom de middleware HTTP, est principalement utilisé pour modifier ou filtrer les demandes ou les réponses HTTP. Tous ces middleware sont situés dans le répertoire APP / Middleware.
Le middleware est divisé en avant middleware et après middleware. Avant que le middleware est principalement utilisé pour modifier les demandes HTTP. Une fois que le middleware est principalement utilisé pour modifier les réponses HTTP.
Request->Before middleware->Actual action->After middleware->Response
La principale différence entre le middleware avant et après middleware est l'endroit où le code est exécuté. Dans le répertoire APP / Middleware:
Créer comme 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);
}
}
?>
Créer comme 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;
}
}
?>
Dans config / middleware.php, écrivez ce qui suit:
return [
AppMiddlewareaMiddleware::class,
AppMiddlewarebMiddleware::class,
];
Voir le routage.
La façade fournit une interface d'appel statique pour les classes (dynamiques) de la bibliothèque de classe de base du framework. Vous permet de faire des méthodes de classe dynamique d'appel statiquement.
Dans 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().
}
}
Toutes les façades du système sont placées dans le répertoire AmazoPHP / SRC / FACADE.
Le conteneur est un outil puissant pour gérer les dépendances des cours et effectuer une injection de dépendance.
Par exemple:
<?php
namespace AppControllers;
use AmazePHPRequest;
class Foo
{
public function bar(Request $request, $id)
{
echo $request->url();
}
}
?>
La méthode de la barre dépend de la classe de demande $request->url() pouvez mettre la demande de demande $ dans les paramètres de la barre.
Les scénarios qui soutiennent l'utilisation de l'injection de dépendance comprennent (mais sans s'y limiter):
$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']);
$ La réponse est un tableau contenant des données status_code, en-tête et corps.
Les paramètres de fonction sont les suivants:
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 = [])
La session est close par défaut, si vous souhaitez ouvrir, veuillez modifier le Session_enable dans le fichier .env en true.
session(["name" => "value"]);
$value = session('name')
$value = request()->cookie('name');
cookie('name','value',86400); // 86400 seconds
Le composant de la base de données utilise PdoOne , un emballage d'objet d'accès à la base de données pour PHP et PDO. Cliquez sur https://github.com/eftec/pdoone pour voir comment l'utiliser.
Vous trouverez ci-dessous un exemple de la façon de l'utiliser de manière simple.
sélectionner:
$results = db()->select("*")->from('users')->where("name like '%test%'")->toList();
print_r($results);
Utiliser SQL brut:
$sql='select * from users where id=1';
$pdoStatement=db()->runRawQuery($sql,[],false); // [] are the parameters
print_r($pdoStatement->fetchAll());
insérer:
db()->insert("users"
,['name','email','password']
,['kevin','[email protected]','123456']);
mise à jour:
db()->update("users"
,['name'=>'Captain-Crunch','email'=>'[email protected]'] // set
,['id'=>6]); // where
supprimer:
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
Si vous souhaitez l'utiliser, activez d'abord la session.
Les contrefaçons de la demande de site transversal sont un type d'exploit malveillant par lequel des commandes non autorisées sont effectuées au nom d'un utilisateur authentifié. Heureusement, Amazephp facilite la protection de votre application contre les attaques de contrefaçon de demande croisée (CSRF).
Amazephp génère automatiquement un "jeton" CSRF pour chaque session utilisateur active gérée par l'application. Ce jeton est utilisé pour vérifier que l'utilisateur authentifié est la personne qui fait réellement les demandes de l'application. Étant donné que ce jeton est stocké dans la session de l'utilisateur et change chaque fois que la session est régénérée, une application malveillante n'est pas en mesure d'y accéder.
Le jeton CSRF de la session actuel est accessible via la fonction d'assistance csrf_token :
$token = csrf_token();
Chaque fois que vous définissez un formulaire HTML "Post", "Put", "Patch" ou "Supprimer" dans votre application, vous devez inclure un champ csrf _token caché dans le formulaire afin que le middleware de protection CSRF puisse valider la demande. Pour plus de commodité, vous pouvez utiliser la directive sur la lame @csrf pour générer le champ de saisie du jeton caché:
<form method="POST" action="/profile">
@csrf
<!-- Equivalent to... -->
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
En plus de vérifier le jeton CSRF en tant que paramètre de post, l'en-tête de demande libVerifyCsrfToken vérifiera également l'en-tête de demande X-CSRF-TOKEN . Vous pouvez, par exemple, stocker le jeton dans une balise HTML meta :
<meta name="csrf-token" content="{{ csrf_token() }}">
Ensuite, vous pouvez instruire une bibliothèque comme jQuery pour ajouter automatiquement le jeton à tous les en-têtes de demande. Cela offre une protection CSRF simple et pratique pour vos applications basées sur l'AJAX en utilisant la technologie JavaScript Legacy:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
AmazephP stocke le jeton CSRF actuel dans un cookie XSRF-TOKEN crypté qui est inclus avec chaque réponse générée par le cadre. Vous pouvez utiliser la valeur cookie pour définir l'en-tête de demande X-XSRF-TOKEN .
Ce cookie est principalement envoyé en tant que commodité du développeur car certains frameworks et bibliothèques JavaScript, comme Angular et Axios, placent automatiquement sa valeur dans l'en-tête X-XSRF-TOKEN sur les demandes d'origine de même.
./phpunit --bootstrap vendor/autoload.php tests
./phpunit --bootstrap vendor/autoload.php tests --display-warnings
./phpunit --bootstrap vendor/autoload.php tests --display-deprecations
Amazephp est environ 9x plus rapide que Laravel dans hello world Benchmark.
Laravel: 2900 RPS.
Amazephp: 23000 RPS.
Les débogages ouverts et Laravel utilisent le pilote de session de table.