{"id":15880753,"url":"https://github.com/unimapper/nette","last_synced_at":"2025-09-03T06:32:41.942Z","repository":{"id":15153609,"uuid":"17881134","full_name":"unimapper/nette","owner":"unimapper","description":"Nette extension for UniMapper","archived":false,"fork":false,"pushed_at":"2017-01-25T23:33:51.000Z","size":140,"stargazers_count":1,"open_issues_count":2,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-02-28T00:12:29.309Z","etag":null,"topics":["extension","nette","orm","unimapper"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/unimapper.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-03-18T20:37:45.000Z","updated_at":"2017-09-19T19:39:55.000Z","dependencies_parsed_at":"2022-08-01T01:07:56.201Z","dependency_job_id":null,"html_url":"https://github.com/unimapper/nette","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unimapper%2Fnette","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unimapper%2Fnette/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unimapper%2Fnette/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unimapper%2Fnette/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/unimapper","download_url":"https://codeload.github.com/unimapper/nette/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243864629,"owners_count":20360356,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["extension","nette","orm","unimapper"],"created_at":"2024-10-06T03:21:26.855Z","updated_at":"2025-03-17T12:31:34.845Z","avatar_url":"https://github.com/unimapper.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"Unimapper Nette extension\n=========================\n\n[![Build Status](https://secure.travis-ci.org/unimapper/nette.png?branch=master)](http://travis-ci.org/unimapper/nette)\n\nOfficial Unimapper extension for Nette framework.\n\n## Install\n\n```sh\n$ composer require unimapper/nette:@dev\n```\n\n### Nette 2.1 and higher\n\nRegister extension in `config.neon`.\n\n```yml\nextensions:\n    unimapper: UniMapper\\Nette\\Extension\n```\n\n### Nette 2.0\n\nRegister extension in `app/bootstrap.php`.\n\n```php\nUniMapper\\Nette\\Extension::register($configurator);\n\nreturn $configurator-\u003ecreateContainer();\n```\n\n## Configuration\n\n```yml\nunimapper:\n    adapters:\n        Mongo: @service\n        MySQL: @anotherService\n        ...\n    cache: true\n    namingConvention:\n        entity: 'YourApp\\Model\\*'\n        repository: 'YourApp\\Repository\\*Repository'\n    api:\n        enabled: false\n        module: \"Api\"\n        route: true\n    panel:\n        enabled: true\n        ajax: true # log queries in AJAX requests\n    profiler: true\n    customQueries:\n        - CustomQueryClass\n        - ...\n```\n\n## API\n\nCreating new API for your application is very easy, all you need is presenter for every entity you have.\n\nRemember that every API presenter should always extend **UniMapper\\Nette\\Api\\Presenter**.\n\n```php\nnamespace YourApp\\ApiModule\\Presenter;\n\nclass EntityPresenter extends \\UniMapper\\Nette\\Api\\Presenter\n{\n    ...\n}\n```\n\nNow you can call standard API methods like:\n\n### GET\n\n- associate - common parameter used to tell which association should be included in response. Syntax should be like `?associate[]=property1\u0026associate[]=property2` or `?associate=property1,property2`.\n\n** Response**\n\n```json\n{\n    \"body\": {..}\n}\n```\n\n#### /api/entity/id\nGet a single record.\n\n#### /api/entity\nGet all records.\n\n- count - optional parameter, if `?count=true` set then items count number will be returned in response body instead data.\n- limit - maximum limit is  set to `10`. You can change it by overriding property `$maxLimit` in your API presenter descendant.\n- offset\n- [where](#filtering-data)\n\n### PUT\n\n#### /api/entity\nUpdate all records with JSON data stored in request body. [Filtering](#filtering-data) can be set and response body contains number of affected records.\n\n- [where](#filtering-data)\n\n** Response**\n\n```json\n{\n    \"body\": 3,\n    \"success\": true\n}\n```\n\n#### /api/entity/id\nUpdate single record with JSON data stored in request body.\n\n** Response**\n\n```json\n{\n    \"success\": true\n}\n```\n\n### POST\nCreate new record with JSON data stored in request body and primary value of new entity returned in response body.\n\n#### /api/entity\n\n** Response**\n\n```json\n{\n    \"success\": true,\n    \"link\": \"url to created entity\",\n    \"body\": \"id of created entity\"\n}\n```\n\n### DELETE\n\n#### /api/entity\nDelete all records returned body contains number of deleted records.\n\n- [where](#filtering-data)\n\n** Response**\n\n```json\n{\n    \"body\": {..}\n    \"success\": true\n}\n```\n\n#### /api/entity/id\nDelete single record.\n\n** Response**\n\n```json\n{\n    \"success\": true\n}\n```\n\n### Custom API methods\nYou can even define your custom method.\n\n```php\nnamespace YourApp\\ApiModule\\Presenter;\n\nclass EntityPresenter extends \\UniMapper\\Nette\\Api\\Presenter\n{\n    public function actionYourCustomMethod($id)\n    {\n        ...\n    }\n}\n```\nThen you can make a requests like `/api/entity/1?action=yourCustomMehod`.\n\n### Filtering data\nFilter can be set as a GET parameter `where` in URL. It  should be here a valid JSON format as described [here](http://unimapper.github.io/docs/reference/repository/#filtering-data).\n\n### Error response\nIf some bad request detected or an error occurred the returned response can be like this:\n\n```json\n{\n    \"success\": false\n    \"code\": 405,\n    \"messages\": []\n}\n```\n\n### Generating links\nIn your templates just use standard Nette link macro.\n\n- `{link :Api:Entity:get}`\n- `{link :Api:Entity:get 1}`\n- `{link :Api:Entity:put 1}`\n- `{link :Api:Entity:post}`\n- `{link :Api:Entity:action}`\n\n### Usage\nYou can even build another applications using this API, just register an official API adapter class `UniMapper\\Nette\\Api\\Adapter` in your **config.neon**.\n\n#### Custom request factory\n\nFor easier API queries you can register factory interface as a dynamic service in your **config.neon**.\n\n```yml\nservices:\n    - UniMapper\\Nette\\Api\\ICustomRequestFactory\n```\n\nUsage in your reopistory can look like this:\n\n```php\nclass SomeRepository extends \\UniMapper\\Repository\n{\n    private $requestFactory;\n\n    public function __construct(\n        \\UniMapper\\Connection $connection,\n        \\UniMapper\\Nette\\Api\\ICustomRequestFactory $requestFactory\n    ) {\n        parent::__construct($connection);\n        $this-\u003erequestFactory;\n    }\n\n    public function getSomethingFromApi()\n    {\n        $this-\u003erequestFactory()-\u003esetResource(\"apiResource\")-\u003esetAction(\"custom\")-\u003esend();\n    }\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funimapper%2Fnette","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Funimapper%2Fnette","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funimapper%2Fnette/lists"}