Как это должно работать: < /p>
- Пользователь отправляет пост-запрос API Endlopoint, созданный tomaj /nette-api < /em> < /em> < /em> < /em> < /em> < /em> < /em> < /em> < /em> nette-api < /em> < /Em> проверяет отправленные данные и сохраняет их в базе данных, используя nextras/orm
- Бэкэнд отправляет ответ
[*] Послает запрос post
nextras \ orm \ InvalidStateException: MetadataRage :: get () называется слишком рано. Сначала вы должны создать экземпляр своей модели. Объект модели, который я отправляю в класс API Handler через DI (по крайней мере, это то, что я думал, что я делаю), но когда я пытаюсь его VAR_DUMP, я получаю сообщение об ошибке typed ... не следует обращаться до инициализации
Так выглядит моя конфигурация для конечных топов API
. Вот как моя конфигурация выглядит для конечных топов API
Код: Выделить всё
services:
- App\Core\RouterFactory::createRouter
apiOutputConfigurator: Tomaj\NetteApi\Output\Configurator\DebuggerConfigurator
apiErrorHandler: Tomaj\NetteApi\Error\DefaultErrorHandler
# define apiKey in local.neon
staticTokenRepository: Tomaj\NetteApi\Misc\StaticTokenRepository([%apiKey%: '*'])
- Tomaj\NetteApi\Link\ApiLink
- Tomaj\NetteApi\Misc\IpDetector
apiDecider:
factory: Tomaj\NetteApi\ApiDecider
setup:
- addApi(Tomaj\NetteApi\EndpointIdentifier('GET', 1, 'get-endpoint'), \App\api\Handlers\GetEndpointHandler(), Tomaj\NetteApi\Authorization\NoAuthorization())
- addApi(Tomaj\NetteApi\EndpointIdentifier('POST', 1, 'post-endpoint'), \App\api\Handlers\PostEndpointHandler(), \Tomaj\NetteApi\Authorization\QueryApiKeyAuthentication('api_key', @staticTokenRepository))
< /code>
Так выглядит моя конфигурация для ORM: < /p>
extensions:
nextras.dbal: Nextras\Dbal\Bridges\NetteDI\DbalExtension
nextras.orm: Nextras\Orm\Bridges\NetteDI\OrmExtension
nextras.orm:
model: App\Model\Orm
services:
- \App\Model\Repository\MyRepository(\App\Model\Mapper\MyMapper())
< /code>
Имена классов, конечно, подвергаются цензуре по соображениям конфиденциальности, но они не так важны. < /p>
Это моя сущность < /p>
/**
* @property int $id {primary}
* LIST OF ALL OTHER PROPERTIES
*/
class MyEntity extends Entity
{
}
< /code>
Это мой mapper < /p>
/**
* @extends DbalMapper
*/
class MyMapper extends DbalMapper
{
}
< /code>
И это класс репозитория < /p>
/**
* @extends Repository
*/
class MyRepository extends Repository
{
/**
* @inheritDoc
*/
public static function getEntityClassNames(): array
{
return [MyEntity::class];
}
}
< /code>
и последнее, но не менее важное, класс модели < /p>
/**
* Model
*
* @property-read MyRepository $things
*/
class Orm extends Model
{
}
< /code>
Я попытался ввести объект модели в класс обработчиков просто так (как я видел в демонстрации) < /p>
#[Inject]
private Orm $orm;
< /code>
Но, как говорят сообщения об ошибках, не работает. Что я забыл? Как я писал выше, это первый раз, когда я что-то делаю с Nette, так что я почти уверен, что это то, что опытный Dev Dev сразу найдет. Хэндлер.
Спасибо за любую помощь. < /p>
Редактировать: если я попытаюсь вручную отправить ORM в конструктор класса обработчика, я ставлю его конфигурации здесь (надеюсь правильно) < /p>
apiDecider:
factory: Tomaj\NetteApi\ApiDecider
setup:
- addApi(Tomaj\NetteApi\EndpointIdentifier('GET', 1, 'get-endpoint'), \App\api\Handlers\GetEndpointHandler(App\Model\Orm()), Tomaj\NetteApi\Authorization\NoAuthorization())
- addApi(Tomaj\NetteApi\EndpointIdentifier('POST', 1, 'post-endpoint'), \App\api\Handlers\PostEndpointHandler(App\Model\Orm()), \Tomaj\NetteApi\Authorization\QueryApiKeyAuthentication('api_key', @staticTokenRepository))
service 'apidecider' (тип tomaj \ netteapi \ apidecider): параметр $ configuration in nextras \ orm \ model \ model :: __ construct () не имеет типа класса или значения по умолчанию, поэтому его значение должно быть указано.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... odel-objec