Хороший выбор для запуска PHP -проекта, его можно использовать для разработки Web и API. Это займет всего одну минуту, чтобы начать проект. Он обладает сверхвысокой производительности и очень простым в использовании опыта разработки. Сложных концепций нет, поэтому у него самая низкая кривая обучения.
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+
Справочник приложений содержит основной код вашего приложения. Мы скоро рассмотрим этот каталог более подробно; Однако почти все классы в вашем приложении будут в этом каталоге.
Справочник конфигурации, как следует из названия, содержит все файлы конфигурации вашего приложения. Включите файл конфигурации маршрута.
Помощник функционирует в нем.
Справочник Framework Core, включает в себя несколько класса 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
Шаблонный двигатель использует BladeOne , шаблонный двигатель, похожий на blade Laravel, нажмите здесь https://github.com/eftec/bladeone/wiki/bladeone-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],
],
Первая строка - это метод HTTP -запроса, который поддерживает Head, Get, Post, Pult, Patch, Delete. ['POST,GET'] означает, что как Post и Get поддерживаются. ['*'] указывает, что все методы HTTP поддерживаются.
Вторая строка представляет путь, например /users/{uid}/posts/[{pid}][/] : в кудрявых скобках - это переменные параметры, дополнительные параметры в скобках, т.е. параметры, которые не передавались в URL, [/] для удаления снесения следа.
Третья строка указывает на обратные вызовы PHP, поддержку методов класса, статические методы классов, анонимные функции, функции и т. Д.
Четвертая строка не является обязательной и указывает название именованного маршрута.
Ключ промежуточного программного обеспечения является необязательным промежуточным программным обеспечением.
Class Amastephp 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']);
}
Больше использования См. AmaMephp/src/request.php.
AmaMephp не предоставляет класс Соответствия по соображениям производительности. Используйте header () Funcion и Echo или возвращайтесь к ответу в контроллерах или промежуточном программном обеспечении.
Вместо того, чтобы определить всю вашу логику обработки запросов как закрытие в файлах вашего маршрута, вы можете организовать это поведение, используя классы «контроллера». Контроллеры могут группировать связанные с ним логику обработки запросов в один класс. Например, класс UserController может обрабатывать все входящие запросы, связанные с пользователями, включая отображение, создание, обновление и удаление пользователей. По умолчанию контроллеры хранятся в каталоге app/Controllers .
В app/Controllers вы можете написать несколько контроллеров, например:
<?php
namespace AppControllers;
class Index
{
public function index()
{
echo 'Hello AmazePHP!';
}
}
После того, как вы написали класс и метод контроллера, вы можете определить маршрут к методу контроллера, как SO:
[
['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);
}
}
?>
Создать, например, middleware.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,
];
Смотрите маршрутизацию.
Фасад обеспечивает статический интерфейс вызовов для (динамических) классов библиотеки классов основных классов Framework. Вы можете получить статически динамические методы динамического класса.
В приложении Controllers 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().
}
}
Все фасады системы размещаются в каталоге AmaMephp/SRC/Facade.
Контейнер является мощным инструментом для управления зависимостями классов и выполнения инъекции зависимостей.
Например:
<?php
namespace AppControllers;
use AmazePHPRequest;
class Foo
{
public function bar(Request $request, $id)
{
echo $request->url();
}
}
?>
Метод BAR зависит от класса запроса. Вы можете поместить запрос запроса $ в параметрах бара. FrameWork будет автоматически вызовать класс запросов, поэтому вы можете использовать метод класса запроса: например, $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']);
$ response - это массив, содержащий состояния_кода, заголовок и данных тела.
Параметры функции следующие:
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 = [])
Сеанс закрыт по умолчанию, если вы хотите открыть, пожалуйста, измените session_enable в файле .env на true.
session(["name" => "value"]);
$value = session('name')
$value = request()->cookie('name');
cookie('name','value',86400); // 86400 seconds
Компонент базы данных использует PdoOne , обертку объекта доступа к базе данных для PHP и PDO. Нажмите https://github.com/eftec/pdooone, чтобы увидеть, как его использовать.
Ниже приведен пример того, как использовать его простым способом.
выбирать:
$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
Если вы хотите использовать его, сначала включите сеанс.
Формирование запросов поперечного сайта-это тип вредоносного эксплойта, в результате которого несанкционированные команды выполняются от имени аутентифицированного пользователя. К счастью, Amastephp позволяет легко защитить ваше приложение от атак подключения запросов (CSRF).
Amawephp автоматически генерирует токен CSRF для каждого активного сеанса пользователя, управляемого приложением. Этот токен используется для проверки того, что аутентифицированный пользователь - это человек, который фактически делает запросы в приложение. Поскольку этот токен хранится в сеансе пользователя и меняется каждый раз, когда сеанс регенерирован, злонамеренное приложение не может получить к нему доступ.
Токен CSRF текущего сеанса можно получить через функцию HELPER csrf_token :
$token = csrf_token();
В любое время, когда вы определяете форму «post», «pat», «patch» или «удалить» HTML -форму в вашем приложении, вы должны включить скрытое поле CSRF _token в форме, чтобы среднее ПО защите CSRF мог проверить запрос. Для удобства вы можете использовать директиву @csrf Blade для генерации скрытого поля ввода токена:
<form method="POST" action="/profile">
@csrf
<!-- Equivalent to... -->
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
В дополнение к проверке токена CSRF в качестве параметра POST, libVerifyCsrfToken также проверит заголовок запроса X-CSRF-TOKEN . Вы могли бы, например, сохранить токен в HTML meta Tag:
<meta name="csrf-token" content="{{ csrf_token() }}">
Затем вы можете инструктировать библиотеку, такую как JQUERY, автоматически добавить токен во все заголовки запросов. Это обеспечивает простую, удобную защиту CSRF для ваших приложений на основе AJAX, используя устаревшую технологию JavaScript:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
Amastephp хранит текущий токен CSRF в зашифрованном печенье XSRF-TOKEN , который включен в каждый ответ, генерируемый структурой. Вы можете использовать значение cookie, чтобы установить заголовок запроса X-XSRF-TOKEN .
Этот файл cookie в основном отправляется в качестве удобства разработчика, так как некоторые рамки и библиотеки JavaScript, такие как Angular и Axios, автоматически помещают его значение в заголовке 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
AmaMephp примерно в 9 раз быстрее, чем Laravel в hello world Benchmark.
Laravel: 2900 RPS.
AmaMephp: 23000 RPS.
Обе открытые отладки, и Ларавель использует драйвер сеанса массива.