{"id":13462208,"url":"https://github.com/Haehnchen/idea-php-toolbox","last_synced_at":"2025-03-25T01:31:53.961Z","repository":{"id":25140397,"uuid":"28562615","full_name":"Haehnchen/idea-php-toolbox","owner":"Haehnchen","description":"Collections of tools and improvements to make PhpStorm a little bit better","archived":false,"fork":false,"pushed_at":"2023-03-29T15:40:06.000Z","size":533,"stargazers_count":158,"open_issues_count":55,"forks_count":20,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-03-22T18:25:21.783Z","etag":null,"topics":["annotation","intellij","intellij-plugin","java","php","phpstorm","phpstorm-plugin","twig"],"latest_commit_sha":null,"homepage":"http://phpstorm.espend.de/php-toolbox","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Haehnchen.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null},"funding":{"github":["Haehnchen"],"custom":"https://www.paypal.me/DanielEspendiller"}},"created_at":"2014-12-28T13:37:25.000Z","updated_at":"2025-02-24T17:44:13.000Z","dependencies_parsed_at":"2024-04-18T19:06:00.700Z","dependency_job_id":null,"html_url":"https://github.com/Haehnchen/idea-php-toolbox","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/Haehnchen%2Fidea-php-toolbox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Haehnchen%2Fidea-php-toolbox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Haehnchen%2Fidea-php-toolbox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Haehnchen%2Fidea-php-toolbox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Haehnchen","download_url":"https://codeload.github.com/Haehnchen/idea-php-toolbox/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245382058,"owners_count":20606147,"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":["annotation","intellij","intellij-plugin","java","php","phpstorm","phpstorm-plugin","twig"],"created_at":"2024-07-31T12:00:42.179Z","updated_at":"2025-03-25T01:31:53.490Z","avatar_url":"https://github.com/Haehnchen.png","language":"Java","readme":"Intellij / PhpStorm Plugin for PHP Improvements\n========================\n\n[![Build Status](https://github.com/Haehnchen/idea-php-toolbox/actions/workflows/gradle.yml/badge.svg?branch=master)](https://github.com/Haehnchen/idea-php-toolbox/actions/workflows/gradle.yml)\n[![Version](http://phpstorm.espend.de/badge/8133/version)](https://plugins.jetbrains.com/plugin/8133)\n[![Downloads](http://phpstorm.espend.de/badge/8133/downloads)](https://plugins.jetbrains.com/plugin/8133)\n[![Downloads last month](http://phpstorm.espend.de/badge/8133/last-month)](https://plugins.jetbrains.com/plugin/8133)\n[![Donate to this project using Paypal](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.me/DanielEspendiller)\n\nKey         | Value\n----------- | -----------\nPlugin Url  | http://plugins.jetbrains.com/plugin?pr=\u0026pluginId=8133\nID          | de.espend.idea.php.toolbox\nDoc x       | http://phpstorm.espend.de/php-toolbox\n\n## Screenshots\n![Php Toolbox PHPUnit](https://plugins.jetbrains.com/files/8133/screenshot_15579.png)\n\n## Core improvements\n\n### Type hint variable\n```php\n// Strips several non common variable names of type hint completion; like \"interface\"\nfunction foo(FooInterface $\u003ccaret\u003e)\nfunction foo(FooAbstract $\u003ccaret\u003e)\nfunction foo(FooExtension $\u003ccaret\u003e)\n```\n\n### Callable arrays\n```php\nclass Bar\n{\n    public function foo()\n    {\n        [$this, 'foo\u003ccaret\u003e']\n        [$foo, 'foo\u003ccaret\u003e']\n    }\n}\n$foo = new Bar();\n```\n\n### String class, method and function navigation\n```php\nfoo('\\\\DateTime');\nfoo('\\\\DateTime:format');\nfoo('\\\\DateTime::format');\n'DateTime::format';\n'date';\n```\n\n## Json Configuration\n\nAll files in project named `.ide-toolbox.metadata.json` or application folder with pattern `/php-toolbox/*-toolbox.metadata.json`. Find your application \"Settings \u003e Languages \u0026 Framework \u003e PHP Toolbox\"\n\n```json\n{\n  \"registrar\":[\n    {\n      \"signature\":[\n        \"Behat\\\\Behat\\\\Context\\\\Environment\\\\ContextEnvironment:hasContextClass\",\n        \"Behat\\\\Behat\\\\Context\\\\Environment\\\\InitializedContextEnvironment:getContext\"\n      ],\n      \"provider\":\"behat_context_classes\",\n      \"language\":\"php\"\n    }\n  ],\n  \"providers\": [\n    {\n      \"name\": \"behat_context_classes\",\n      \"source\": {\n        \"contributor\": \"sub_classes\",\n        \"parameter\": \"Behat\\\\Behat\\\\Context\\\\Context\"\n      }\n    }\n  ]\n}\n```\n\n\n### Registrar\n\n```json\n{\n  \"provider\":\"date_format\",\n  \"language\":\"php\",\n  \"signatures\":[\n    {\n      \"class\": \"DateTime\",\n      \"method\": \"format\"\n    },\n    {\n      \"class\": \"PHPUnit_Framework_TestCase\",\n      \"method\": \"getMock\",\n      \"type\": \"type\"\n    },\n    {\n      \"class\": \"Symfony\\\\Component\\\\HttpFoundation\\\\Response\",\n      \"method\": \"__construct\",\n      \"type\": \"array_key\",\n      \"index\": 2\n    },\n    {\n      \"class\": \"Symfony\\\\Component\\\\HttpFoundation\\\\Response\",\n      \"method\": \"__construct\",\n      \"index\": 2,\n      \"array\": \"Content-Type\"\n    }    \n  ]\n}\n```\n\n#### Function\n\n```php\nfoo('\u003ccaret\u003e')\n```\n\n```json\n{\n  \"function\": \"foo\"\n}\n```\n\n```php\nfoo('', '\u003ccaret\u003e')\n```\n\n```json\n{\n  \"function\": \"foo\",\n  \"index\": 1\n}\n```\n\n#### Class method\n\n```php\n/** @var $f \\\\FooClass */\n$f-\u003efoo('\u003ccaret\u003e')\n```\n\n```json\n{\n  \"class\": \"FooClass\",\n  \"method\": \"foo\"\n}\n```\n\n```php\n/** @var $f \\\\FooClass */\n$f-\u003efoo('', '\u003ccaret\u003e')\n```\n\n```json\n{\n  \"class\": \"FooClass\",\n  \"method\": \"foo\",\n  \"index\": 1\n}\n```\n\n#### Types\n\n```php\n/** @var $f \\\\FooClass */\n$f-\u003efoo('date_time')-\u003eformat\u003ccaret\u003e\n$f-\u003efoo(DateTime::class)-\u003eformat\u003ccaret\u003e\n$f-\u003efoo(new DateTime())-\u003eformat\u003ccaret\u003e\n$f-\u003ebar('', 'date_time')-\u003eformat\u003ccaret\u003e\n```\n\n```json\n{\n  \"registrar\":[\n    {\n      \"provider\":\"date\",\n      \"language\":\"php\",\n      \"signatures\":[\n        {\n          \"class\": \"FooClass\",\n          \"method\": \"foo\",\n          \"type\": \"type\"\n        },\n        {\n          \"class\": \"FooClass\",\n          \"method\": \"bar\",\n          \"index\": 1,\n          \"type\": \"type\"\n        }\n      ]\n    }\n  ],\n  \"providers\": [\n    {\n      \"name\": \"date\",\n      \"items\":[\n        {\n          \"lookup_string\": \"date_time\",\n          \"type\": \"DateTime\"\n        }\n      ]\n    }\n  ]\n}\n```\n\n#### Inline Code\n\n```php\n(new \\Foo\\Car())-\u003efoo('\u003ccaret\u003e');\nfoo('\u003ccaret\u003e');\n```\n\n```php\nClass Car\n{\n   /**\n    * @param string $foo my Var #Class\n    * @param string $bar my car #\u003cProviderName\u003e foo bar\n    */\n   public function foo($foo, $bar) {}\n}\n\n/**\n * @param string $foo my Var #Class\n */\nfunction foo($foo) {}\n```\n\n#### Array\n\n```php\nfoo(['\u003ccaret\u003e'])\n```\n\n```json\n{\n  \"function\": \"foo\",\n  \"type\": \"array_key\"\n}\n```\n\n```php\nfoo(['foo' =\u003e '\u003ccaret\u003e'])\n```\n\n```json\n{\n  \"function\": \"foo\",\n  \"array\": \"foo\"\n}\n```\n\n#### Signature shortcut\n\n```json\n{\n  \"provider\":\"class_interface\",\n  \"language\":\"php\",\n  \"signature\":[\n    \"ReflectionProperty:__construct\",\n    \"class_exists\",\n    \"is_subclass_of:1\" // \":1\" means 2nd argument (arguments indexing starts from 0)\n  ]  \n}\n```\n\n#### Twig\n\n```twig\n{{ foo('\u003ccaret\u003e') }}\n{% if foo('\u003ccaret\u003e') %}\n{% set bar = foo('\u003ccaret\u003e') %}\n{{ 'bar'|foo('\u003ccaret\u003e') }}\n```\n\n```json\n{\n  \"provider\":\"date_format\",\n  \"language\":\"twig\",\n  \"signatures\":[\n    {\n      \"function\": \"foo\"\n    }\n  ]\n}\n```    \n\n### Providers\n\n```json\n{\n  \"name\": \"date_format\",\n  \"items\":[\n    {\n      \"lookup_string\": \"d\",\n      \"type_text\": \"Day of month (01..31)\",\n      \"icon\": \"com.jetbrains.php.PhpIcons.METHOD\",\n      \"presentable_text\": \"foo\",\n      \"tail_text\": \"foo\",\n      \"type\": \"DateTime\",\n      \"target\": \"DateTime\",\n      \"target\": \"Ns\\\\Time::format\",\n      \"target\": \"DateTime:format\",\n      \"target\": \"file://foo/foo.html.twig\",\n    }\n  ]\n}\n```\n\n#### Lookup shortcut\n\n```json\n{\n  \"name\": \"date_format\",\n  \"lookup_strings\": [\"car\", \"apple\"]\n}\n```\n\n#### Lookup defaults\n\n```json\n{\n  \"name\": \"date_format\",\n  \"defaults\": {\n    \"icon\":\"com.jetbrains.php.PhpIcons.METHOD\",\n  },\n  \"items\": [\n    {\n      \"lookup_string\":\"d\",\n    }\n  ]  \n}\n```\n\n#### Sources\n \n##### return\n\n```php\nclass SecurityExtension implements Twig_ExtensionInterface\n{\n    public function getName()\n    {\n        return 'security'\n    }\n}\nclass WebProfilerExtension extends Twig_ExtensionInterface\n{\n    public function getName()\n    {\n        return 'profiler'\n    }\n}\n```\n\n```json\n{\n  \"name\": \"twig_extensions\",\n  \"source\": {\n    \"contributor\": \"return\",\n    \"parameter\": \"Twig_ExtensionInterface::getName\"\n  }\n}\n```\n\n##### return_array\n\n```php\nclass UserAdmin implements AdminInterface\n{\n    public function getExportFormats()\n    {\n        return ['json', 'xml']\n    }\n}\nclass TopicAdmin extends AdminInterface\n{\n    public function getExportFormats()\n    {\n        return ['csv', 'xls']\n    }\n}\n```\n\n```json\n{\n  \"name\": \"sonata_admin_export_formats\",\n  \"source\": {\n    \"contributor\": \"return_array\",\n    \"parameter\": \"Sonata\\\\AdminBundle\\\\Admin\\\\AdminInterface:getExportFormats\"\n  }\n}\n```\n\n##### sub_classes\n\n```php\nclass Foo implements BehatContext {}\nclass Foo extends BehatContext {}\n```\n\n```json\n{\n  \"name\": \"behat_context_classes\",\n  \"source\": {\n    \"contributor\": \"sub_classes\",\n    \"parameter\": \"BehatContext\"\n  }\n}\n```\n\n###### traits\n```json\n{\n  \"provider\": \"trait\",\n  \"language\": \"php\"\n}\n```\n","funding_links":["https://github.com/sponsors/Haehnchen","https://www.paypal.me/DanielEspendiller"],"categories":["Uncategorized","IDE / PhpStorm Plugins"],"sub_categories":["Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHaehnchen%2Fidea-php-toolbox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FHaehnchen%2Fidea-php-toolbox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHaehnchen%2Fidea-php-toolbox/lists"}