Una buena opción para comenzar un proyecto PHP, se puede utilizar para el desarrollo web y de API. Solo toma un minuto iniciar un proyecto. Tiene un alto rendimiento y una experiencia de desarrollo muy fácil de usar. No hay conceptos complicados, por lo que tiene la curva de aprendizaje más baja.
composer create-project amazephp/amazephp
o use el clon Git:
git clone https://github.com/w3yyb/AmazePHP.git
cd AmazePHP
composer install
cd public/
php -S localhost:9080 server.php
Abra http: // localhost: 9080 en su navegador.
PHP 8.1+
El directorio de aplicaciones contiene el código central de su aplicación. Exploraremos este directorio con más detalle pronto; Sin embargo, casi todas las clases de su aplicación estarán en este directorio.
El directorio de configuración, como lo indica el nombre, contiene todos los archivos de configuración de su aplicación. Incluya el archivo de configuración de ruta.
El ayudante funciona en él.
El directorio central de marco incluye alguna clase LIB. Y puede poner su archivo de clase en él.
El directorio público contiene el archivo index.php, que es el punto de entrada para todas las solicitudes que ingresan a su aplicación y configura la autoengustación. Este directorio también alberga sus activos, como imágenes, JavaScript y CSS.
El directorio de caché contiene sus archivos de caché, incluye archivos de registro.
El directorio de plantilla contiene sus archivos de plantilla 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');
Para establecer los valores de configuración en tiempo de ejecución, pase una matriz a la función de configuración:
config(['app.timezone' => 'America/Chicago']);
$value = cache('key');
cache(['key' => 'value'], 10);// Expires after 10 seconds
El motor de plantilla usa BladeOne , un motor de plantilla similar al Laravel blade , haga clic aquí https://github.com/eftec/bladeone/wiki/bladeone-manual Ver el manual de bladeone.
echo view('greeting', ['name' => 'James']);
El primer parámetro es el nombre de la plantilla, es decir template/greeting.blade.php , y el segundo parámetro es la variable que se pasa a la plantilla.
env('key');
env('key','default');
El segundo valor pasado a la función ENV es el "valor predeterminado". Este valor se devolverá si no existe una variable de entorno para la clave dada.
logger('some msg');//error log
logger('some msg','warning'); //warning log | support:emergency ,alert ,critical ,error ,warning ,notice ,info ,debug
ver config/ruta.php
[
['GET'],
'/',
[AppControllersIndex::class, 'index'],
'routename',
'middleware'=>[AppMiddlewarea2Middleware::class,AppMiddlewareb2Middleware::class],
],
La primera línea es el método de solicitud HTTP, que admite cabeza, obtener, publicar, poner, parche, eliminar. ['POST,GET'] significa que tanto Post como Get son compatibles. ['*'] indica que todos los métodos HTTP son compatibles.
La segunda línea representa la ruta, me gusta /users/{uid}/posts/[{pid}][/] : en los aparatos ortopédicos rizados hay parámetros variables, parámetros opcionales en los soportes, es decir, parámetros que no han pasado en la URL, [/] para eliminar la barra posterior.
La tercera línea indica devoluciones de llamada PHP, soporte para métodos de clase, métodos estáticos de clases, funciones anónimas, funciones, etc.
La cuarta línea es opcional e indica el nombre de la ruta nombrada.
La tecla Middleware es el middleware de enrutamiento de registro opcional.
La clase de solicitud de AmazePhp proporciona una forma orientada a objetos de interactuar con la solicitud HTTP actual que está manejando su aplicación, así como para recuperar la entrada, las cookies y los archivos que se enviaron con la solicitud.
$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']);
}
Más uso Ver Amazephp/src/request.php.
AmazephP no proporciona una clase respeosa por razones de rendimiento. Use funciones de encabezado () y eco o regrese a la respuesta en controladores o middleware.
En lugar de definir todas sus solicitudes de manejo de la lógica como cierres en los archivos de su ruta, es posible que desee organizar este comportamiento utilizando clases de "controlador". Los controladores pueden agrupar la lógica de manejo de solicitudes relacionadas en una sola clase. Por ejemplo, una clase UserController podría manejar todas las solicitudes entrantes relacionadas con los usuarios, incluida la muestra, la creación, la actualización y la eliminación de los usuarios. Por defecto, los controladores se almacenan en el directorio de app/Controllers .
En app/Controllers , puede escribir algunos controladores, por ejemplo:
<?php
namespace AppControllers;
class Index
{
public function index()
{
echo 'Hello AmazePHP!';
}
}
Una vez que haya escrito una clase y un método de controlador, puede definir una ruta al método del controlador como así:
[
['GET'],
'/',
[AppControllersIndex::class, 'index']
],
Cuando una solicitud entrante coincide con la URI de ruta especificada, se invocará el método de índice en la clase App Controllers Index Index y los parámetros de ruta se pasarán al método.
El middleware, también conocido como HTTP Middleware, se usa principalmente para modificar o filtrar las solicitudes o respuestas HTTP. Todos estos middleware están ubicados en el directorio de la aplicación/middleware.
El middleware se divide antes del middleware y después del middleware. Antes de que el middleware se use principalmente para modificar las solicitudes HTTP. Después de que el middleware se usa principalmente para modificar las respuestas HTTP.
Request->Before middleware->Actual action->After middleware->Response
La principal diferencia entre el middleware antes y después del middleware es donde se ejecuta el código. En el directorio de aplicación/middleware:
Crear como 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);
}
}
?>
Crear como 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;
}
}
?>
En config/middleware.php, escriba lo siguiente:
return [
AppMiddlewareaMiddleware::class,
AppMiddlewarebMiddleware::class,
];
Ver enrutamiento.
La fachada proporciona una interfaz de llamada estática para las clases (dinámicas) de la biblioteca de clases centrales del marco. Lo permite a los métodos de clase dinámica.
En 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().
}
}
Todas las fachadas del sistema se colocan en el directorio Amazephp/Src/Fachade.
El contenedor es una herramienta poderosa para administrar las dependencias de clases y realizar la inyección de dependencia.
Por ejemplo:
<?php
namespace AppControllers;
use AmazePHPRequest;
class Foo
{
public function bar(Request $request, $id)
{
echo $request->url();
}
}
?>
El método de la barra depende de la clase de solicitud. Puede colocar la solicitud $ solicitud en los parámetros de la barra. El trabajo de trabajo llamará automáticamente la clase de solicitud, por lo que puede usar el método de clase de solicitud: por ejemplo $request->url() .
Los escenarios que respalden el uso de la inyección de dependencia incluyen (pero no se limitan a):
$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 respuesta es una matriz que contiene datos de status_code, encabezado y cuerpo.
Los parámetros de la función son los siguientes:
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 sesión está cerrada de forma predeterminada, si desea abrir, cambie la sesión_enable en el archivo .env a verdadero.
session(["name" => "value"]);
$value = session('name')
$value = request()->cookie('name');
cookie('name','value',86400); // 86400 seconds
El componente de la base de datos está utilizando PdoOne , un contenedor de objetos de acceso a la base de datos para PHP y PDO. Haga clic en https://github.com/eftec/pdoone para ver cómo usarlo.
A continuación se muestra un ejemplo de cómo usarlo de manera simple.
seleccionar:
$results = db()->select("*")->from('users')->where("name like '%test%'")->toList();
print_r($results);
Use SQL en bruto:
$sql='select * from users where id=1';
$pdoStatement=db()->runRawQuery($sql,[],false); // [] are the parameters
print_r($pdoStatement->fetchAll());
insertar:
db()->insert("users"
,['name','email','password']
,['kevin','[email protected]','123456']);
actualizar:
db()->update("users"
,['name'=>'Captain-Crunch','email'=>'[email protected]'] // set
,['id'=>6]); // where
borrar:
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 desea usarlo, primero habilite la sesión.
Las falsificaciones de solicitud de sitios cruzados son un tipo de exploit malicioso por el cual los comandos no autorizados se realizan en nombre de un usuario autenticado. Afortunadamente, Amazephp facilita la protección de su aplicación de los ataques de falsificación de solicitudes entre sitios (CSRF).
Amazephp genera automáticamente un "token" CSRF para cada sesión de usuario activa administrada por la aplicación. Este token se usa para verificar que el usuario autenticado es la persona que realmente realiza las solicitudes para la aplicación. Dado que este token se almacena en la sesión del usuario y cambia cada vez que se regenera la sesión, una aplicación maliciosa no puede acceder a ella.
Se puede acceder al token CSRF de la sesión actual se puede acceder a través de la función Helper csrf_token :
$token = csrf_token();
Cada vez que defina un formulario HTML "Post", "Put", "Patch" o "Eliminar" en su aplicación, debe incluir un campo oculto CSRF _token en el formulario para que el middleware de protección CSRF pueda validar la solicitud. Por conveniencia, puede usar la directiva @csrf Blade para generar el campo de entrada de token oculto:
<form method="POST" action="/profile">
@csrf
<!-- Equivalent to... -->
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
Además de verificar el token CSRF como parámetro posterior, libVerifyCsrfToken también verificará el encabezado de solicitud de X-CSRF-TOKEN . Podrías, por ejemplo, almacenar el token en una meta etiqueta HTML:
<meta name="csrf-token" content="{{ csrf_token() }}">
Luego, puede instruir a una biblioteca como jQuery que agregue automáticamente el token a todos los encabezados de solicitud. Esto proporciona protección CSRF simple y conveniente para sus aplicaciones basadas en AJAX utilizando la tecnología Legacy JavaScript:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
Amazephp almacena el token CSRF actual en una cookie encriptada de XSRF-TOKEN que se incluye con cada respuesta generada por el marco. Puede usar el valor de la cookie para establecer el encabezado de solicitud X-XSRF-TOKEN .
Esta cookie se envía principalmente como una conveniencia del desarrollador ya que algunos marcos y bibliotecas de JavaScript, como Angular y Axios, colocan automáticamente su valor en el encabezado X-XSRF-TOKEN en las solicitudes del mismo origen.
./phpunit --bootstrap vendor/autoload.php tests
./phpunit --bootstrap vendor/autoload.php tests --display-warnings
./phpunit --bootstrap vendor/autoload.php tests --display-deprecations
Amazephp es aproximadamente 9 veces más rápido que Laravel en hello world Benchmark.
Laravel: 2900 RPS.
Amazephp: 23000 RPS.
Ambos abiertos de depuración, y Laravel usa el controlador de la sesión de matriz.