Большинство примеров использования phpslim3 выглядит так
$app->get('/hello/{name}', function ($request, $response, $args) { ... });
Но вместо того, чтобы просто писать код внутри скобок обратного вызова, я предпочитаю создать класс с разделенными функциями;
Дело в том, что мой код не работает. Мой ответ только:
Сообщение: Callable Api \ CreateAccountController не существует
Файл: C: \ Users \ dedeu \ Documents \ Work \ php \ l21-api-slim \ vendor \ slim \ slim \ Slim \ CallableResolver.php
Линия: 90
Я уже проверил файлы этой документации, но тоже не работает (работает, но я делаю что-то не так)
https://www.slimframework.com/docs/v3/objects/router.html#post-route
composer.json
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/",
"App\\": "src/",
"Api\\": "src/Api/"
}
},
"autoload": {
"psr-4": {
"Api\\": "src/Api/"
}
},
router.php
<?php
use Slim\Http\Request;
use Slim\Http\Response;
use Api\CreateAccountController;
// Routes
// $app->get('/[{name}]', function (Request $request, Response $response, array $args) {
// // Sample log message
// $this->logger->info("Slim-Skeleton '/' route");
$app->post('/api/moip/create-account', \Api\CreateAccountController::class . ':create');
dependencies.php
<?php
// DIC configuration
$container = $app->getContainer();
// view renderer
$container['renderer'] = function ($c) {
$settings = $c->get('settings')['renderer'];
return new Slim\Views\PhpRenderer($settings['template_path']);
};
// monolog
$container['logger'] = function ($c) {
$settings = $c->get('settings')['logger'];
$logger = new Monolog\Logger($settings['name']);
$logger->pushProcessor(new Monolog\Processor\UidProcessor());
$logger->pushHandler(new Monolog\Handler\StreamHandler($settings['path'], $settings['level']));
return $logger;
};
$container['CreateAccountController'] = function($c) {
$view = $c->get("view"); // retrieve the 'view' from the container
return new \Api\CreateAccountController($view);
};
CreateAccountController.php
<?php
namespace Api;
class CreateAccountController
{
protected $view;
public function __construct(\Slim\Views\Twig $view) {
$this->view = $view;
}
public function create($request, $response, $args) {
$data = $request->getParsedBody();
$status = $response->getStatusCode();
if(!isset($data["teste"])){
// print_r('rara rasputin');
$out = array('message' => 'you lack infos', 'code' => 400);
$response = $response->withJson($out, 400);
return $response;
}
$response = $response->withJson($data, 201);
return $response;
}
}
Код может выглядеть как-то неаккуратно, потому что я пытался сделать что-нибудь, чтобы это работало.
(уже пытался переключить \ Api \ CreateAccountController на \ CreateAccountController
Мой путь к проекту