Я пытаюсь собрать минимальную систему маршрутизации Symfony для запуска на стороне моей установки Laravel, чтобы входящие API находились вне полной установки Laravel.Я заметил, что наша обычная система Laravel включает в себя 575 файлов для рендеринга / загрузки, и она слишком медленная для обработки входящей рабочей нагрузки.Подробнее здесь: https://serverfault.com/questions/959018/apache-tuning-for-512gb-ram
Чтобы собрать его вместе, я создал новый файл композитора с именем minvendor.json
со следующим:
{
"config": {
"vendor-dir": "minvendor"
},
"require": {
"symfony/routing": "^4.2",
"symfony/http-foundation": "^4.2",
"symfony/yaml": "^4.2",
"symfony/config": "^4.2"
}
}
Поскольку уже существует файл composer.json
, вам нужно использовать другую команду для загрузки файла minvendor.json
.
env COMPOSER=minvendor.json composer install
Затем я поместил в файл .htaccess
следующее:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^api api.php [L]
После этого я сделалфайл api.php
со следующими
<?PHP
require __DIR__.'/../minvendor/autoload.php';
use Symfony\Component\Config\FileLocator;
use Symfony\Component\Routing\Loader\YamlFileLoader;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
$fileLocator = new FileLocator([__DIR__]);
$loader = new YamlFileLoader($fileLocator);
$routes = $loader->load('routes.yaml');
class LuckyController
{
public function number()
{
$number = random_int(0, 100);
return new Response(
'<html><body>Lucky number: '.$number.'</body></html>'
);
}
}
и файлом routes.yaml
:
route1:
path: api/foo
controller: LuckyController::number
methods: GET|POST
Использование функции php print_r(get_included_files())
Я вижу, что я использую только 20 includeфайлы для этого нового способа, намного лучше, но я не получаю ничего возвращенного в браузер, когда я захожу на сайт: http://www.myserver.org/api/foo
Я пробовал пару других способов, таких как:
$foo_route = new Route('/api/foo', array('App\Http\Controllers\Api\V2\LuckyController' => 'number') );
Ничто из того, что я делаю, похоже, не дает Symfony доступа к функциям и не возвращает результаты в браузер.Чего мне не хватает в процессе?