Merge pull request #407 from skipperbent/v4-release

V4 release
This commit is contained in:
Simon Sessingø
2018-04-06 17:28:12 +02:00
committed by GitHub
15 changed files with 706 additions and 528 deletions
+315 -313
View File
@@ -1,14 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="BookmarkManager">
<bookmark url="file://$PROJECT_DIR$/src/Pecee/Http/Input/InputHandler.php" line="221" />
</component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="a7058529-bdc4-40b4-a50d-c50564dc83f0" name="Default" comment=""> <list default="true" id="a7058529-bdc4-40b4-a50d-c50564dc83f0" name="Default" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" /> <change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Handlers/EventHandler.php" beforeDir="false" afterPath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Handlers/EventHandler.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/helpers.php" beforeDir="false" afterPath="$PROJECT_DIR$/helpers.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/ILoadableRoute.php" beforeDir="false" afterPath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/ILoadableRoute.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/Pecee/Http/Input/InputHandler.php" beforeDir="false" afterPath="$PROJECT_DIR$/src/Pecee/Http/Input/InputHandler.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Pecee/Http/Middleware/BaseCsrfVerifier.php" beforeDir="false" afterPath="$PROJECT_DIR$/src/Pecee/Http/Middleware/BaseCsrfVerifier.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Pecee/Http/Request.php" beforeDir="false" afterPath="$PROJECT_DIR$/src/Pecee/Http/Request.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Pecee/Http/Url.php" beforeDir="false" afterPath="$PROJECT_DIR$/src/Pecee/Http/Url.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/LoadableRoute.php" beforeDir="false" afterPath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/LoadableRoute.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/LoadableRoute.php" beforeDir="false" afterPath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/LoadableRoute.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/Route.php" beforeDir="false" afterPath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/Route.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteController.php" beforeDir="false" afterPath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteController.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteGroup.php" beforeDir="false" afterPath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteGroup.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteResource.php" beforeDir="false" afterPath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteResource.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Router.php" beforeDir="false" afterPath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Router.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Router.php" beforeDir="false" afterPath="$PROJECT_DIR$/src/Pecee/SimpleRouter/Router.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/tests/Pecee/SimpleRouter/EventHandlerTest.php" beforeDir="false" afterPath="$PROJECT_DIR$/tests/Pecee/SimpleRouter/EventHandlerTest.php" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/Pecee/SimpleRouter/SimpleRouter.php" beforeDir="false" afterPath="$PROJECT_DIR$/src/Pecee/SimpleRouter/SimpleRouter.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/tests/Pecee/SimpleRouter/InputHandlerTest.php" beforeDir="false" afterPath="$PROJECT_DIR$/tests/Pecee/SimpleRouter/InputHandlerTest.php" afterDir="false" />
</list> </list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="TRACKING_ENABLED" value="true" /> <option name="TRACKING_ENABLED" value="true" />
@@ -20,25 +31,16 @@
<component name="ComposerSettings" doNotAsk="true" synchronizationState="SYNCHRONIZE"> <component name="ComposerSettings" doNotAsk="true" synchronizationState="SYNCHRONIZE">
<pharConfigPath>$PROJECT_DIR$/composer.json</pharConfigPath> <pharConfigPath>$PROJECT_DIR$/composer.json</pharConfigPath>
</component> </component>
<component name="FavoritesManager">
<favorites_list name="simple-php-router" />
</component>
<component name="FileEditorManager"> <component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="375"> <leaf SIDE_TABS_SIZE_LIMIT_KEY="375">
<file leaf-file-name="README.md" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/README.md">
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
<state split_layout="SPLIT">
<first_editor relative-caret-position="230">
<caret line="1298" column="39" selection-start-line="1298" selection-start-column="39" selection-end-line="1298" selection-end-column="39" />
</first_editor>
<second_editor />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="LoadableRoute.php" pinned="false" current-in-tab="false"> <file leaf-file-name="LoadableRoute.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/LoadableRoute.php"> <entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/LoadableRoute.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="146"> <state relative-caret-position="20">
<caret line="92" column="7" lean-forward="true" selection-start-line="92" selection-start-column="7" selection-end-line="92" selection-end-column="7" /> <caret line="71" column="33" selection-start-line="71" selection-start-column="27" selection-end-line="71" selection-end-column="33" />
<folding> <folding>
<element signature="e#44#82#0#PHP" expanded="true" /> <element signature="e#44#82#0#PHP" expanded="true" />
</folding> </folding>
@@ -49,26 +51,17 @@
<file leaf-file-name="RouteController.php" pinned="false" current-in-tab="false"> <file leaf-file-name="RouteController.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteController.php"> <entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteController.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="213"> <state relative-caret-position="20">
<caret line="15" column="13" selection-start-line="15" selection-start-column="13" selection-end-line="15" selection-end-column="13" /> <caret line="15" column="22" lean-forward="true" selection-start-line="15" selection-start-column="22" selection-end-line="15" selection-end-column="22" />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="RouteResource.php" pinned="false" current-in-tab="false"> <file leaf-file-name="IRoute.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteResource.php"> <entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/IRoute.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="213"> <state relative-caret-position="224">
<caret line="33" column="13" selection-start-line="33" selection-start-column="13" selection-end-line="33" selection-end-column="13" /> <caret line="39" column="10" selection-start-line="39" selection-start-column="10" selection-end-line="39" selection-end-column="10" />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="RouteUrl.php" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteUrl.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="300">
<caret line="21" column="50" lean-forward="true" selection-start-line="21" selection-start-column="50" selection-end-line="21" selection-end-column="50" />
</state> </state>
</provider> </provider>
</entry> </entry>
@@ -76,8 +69,8 @@
<file leaf-file-name="ILoadableRoute.php" pinned="false" current-in-tab="false"> <file leaf-file-name="ILoadableRoute.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/ILoadableRoute.php"> <entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/ILoadableRoute.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="362"> <state relative-caret-position="204">
<caret line="42" column="18" selection-start-line="42" selection-start-column="18" selection-end-line="42" selection-end-column="18" /> <caret line="32" column="36" selection-start-line="32" selection-start-column="30" selection-end-line="32" selection-end-column="36" />
<folding> <folding>
<element signature="e#44#67#0#PHP" expanded="true" /> <element signature="e#44#67#0#PHP" expanded="true" />
</folding> </folding>
@@ -85,11 +78,35 @@
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="RouteUrl.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteUrl.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="200">
<caret line="10" column="22" lean-forward="true" selection-start-line="10" selection-start-column="22" selection-end-line="10" selection-end-column="22" />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="InputHandler.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/Pecee/Http/Input/InputHandler.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="425">
<caret line="280" column="38" selection-start-line="280" selection-start-column="38" selection-end-line="280" selection-end-column="38" />
<folding>
<element signature="e#36#82#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Route.php" pinned="false" current-in-tab="false"> <file leaf-file-name="Route.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/Route.php"> <entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/Route.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="211"> <state relative-caret-position="162">
<caret line="239" column="10" selection-start-line="239" selection-start-column="10" selection-end-line="239" selection-end-column="10" /> <caret line="498" column="61" selection-start-line="498" selection-start-column="61" selection-end-line="498" selection-end-column="61" />
<folding>
<element signature="e#44#82#0#PHP" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@@ -97,8 +114,8 @@
<file leaf-file-name="Router.php" pinned="false" current-in-tab="false"> <file leaf-file-name="Router.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Router.php"> <entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Router.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="245"> <state relative-caret-position="220">
<caret line="156" selection-start-line="156" selection-end-line="156" /> <caret line="517" lean-forward="true" selection-start-line="517" selection-end-line="517" />
<folding> <folding>
<element signature="e#38#84#0#PHP" expanded="true" /> <element signature="e#38#84#0#PHP" expanded="true" />
</folding> </folding>
@@ -106,26 +123,23 @@
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="EventHandler.php" pinned="false" current-in-tab="false"> <file leaf-file-name="SimpleRouter.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Handlers/EventHandler.php"> <entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/SimpleRouter.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-742"> <state relative-caret-position="505">
<caret line="28" selection-start-line="28" selection-end-line="28" /> <caret line="63" selection-start-line="63" selection-end-line="63" />
<folding> <folding>
<element signature="e#47#90#0#PHP" expanded="true" /> <element signature="e#302#319#0#PHP" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="EventHandlerTest.php" pinned="false" current-in-tab="false"> <file leaf-file-name="helpers.php" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/tests/Pecee/SimpleRouter/EventHandlerTest.php"> <entry file="file://$PROJECT_DIR$/helpers.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="278"> <state relative-caret-position="180">
<caret line="88" column="13" lean-forward="true" selection-start-line="88" selection-start-column="13" selection-end-line="88" selection-end-column="13" /> <caret line="51" column="59" selection-start-line="51" selection-start-column="59" selection-end-line="51" selection-end-column="59" />
<folding>
<element signature="e#249#292#0#PHP" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@@ -134,36 +148,36 @@
</component> </component>
<component name="FindInProjectRecents"> <component name="FindInProjectRecents">
<findStrings> <findStrings>
<find>$this-&gt;r</find>
<find>getInput</find>
<find>input()-&gt;get</find>
<find>getObject</find>
<find>helpers</find>
<find>group</find>
<find>addDefault</find>
<find>handleExc</find>
<find>function group</find>
<find>function parti</find>
<find>__toString</find>
<find>getValue</find>
<find>getError</find>
<find>(int)</find>
<find>setSize</find>
<find>helpers.php</find>
<find>getName</find>
<find>url(</find>
<find>url()</find>
<find>: void</find>
<find>void</find> <find>void</find>
<find>set</find> <find>set</find>
<find>hasParam</find> <find>hasParam</find>
<find>csrf_token</find> <find>csrf_token</find>
<find>static function start</find> <find>static function start</find>
<find>fireEvents(</find> <find>fireEvents(</find>
<find>EVENT_LOAD</find>
<find>-&gt;setUrl</find> <find>-&gt;setUrl</find>
<find>setUrl</find> <find>EVENT_LOAD</find>
<find>addRoute</find> <find>addRoute</find>
<find>$this-&gt;isPro</find>
<find>7.2</find>
<find>options</find>
<find>parent::set</find>
<find>parseParameters</find>
<find>stripos</find>
<find>setPrefix</find>
<find>var_dum</find>
<find>parse</find>
<find>getParams</find>
<find>setQuery</find>
<find>contains</find>
<find>matchRoute</find>
<find>-&gt;getValue</find>
<find>-&gt;find</find>
<find>function find</find>
<find>Req</find>
<find>value(</find>
<find>file(</find>
<find>setUrl</find>
<find>TODO</find>
</findStrings> </findStrings>
<dirStrings> <dirStrings>
<dir>D:\Workspace\simple-php-router\src\Pecee\SimpleRouter\Route</dir> <dir>D:\Workspace\simple-php-router\src\Pecee\SimpleRouter\Route</dir>
@@ -172,11 +186,11 @@
<dir>D:\Workspace\simple-php-router</dir> <dir>D:\Workspace\simple-php-router</dir>
<dir>E:\Workspace\simple-php-router\tests</dir> <dir>E:\Workspace\simple-php-router\tests</dir>
<dir>E:\Workspace\simple-php-router\src\Pecee</dir> <dir>E:\Workspace\simple-php-router\src\Pecee</dir>
<dir>E:\Workspace\simple-php-router</dir>
<dir>E:\Workspace\simple-php-router\src\Pecee\SimpleRouter</dir>
<dir>E:\Workspace\simple-php-router\tests\Pecee\SimpleRouter</dir> <dir>E:\Workspace\simple-php-router\tests\Pecee\SimpleRouter</dir>
<dir>E:\Workspace\simple-php-router\src</dir>
<dir>E:\Workspace\simple-php-router\src\Pecee\SimpleRouter\Route</dir> <dir>E:\Workspace\simple-php-router\src\Pecee\SimpleRouter\Route</dir>
<dir>E:\Workspace\simple-php-router\src\Pecee\SimpleRouter</dir>
<dir>E:\Workspace\simple-php-router\src</dir>
<dir>E:\Workspace\simple-php-router</dir>
</dirStrings> </dirStrings>
</component> </component>
<component name="Git.Settings"> <component name="Git.Settings">
@@ -188,22 +202,15 @@
<option value="$PROJECT_DIR$/tests/Pecee/SimpleRouter/Dummy/Handler/ExceptionHandlerFirst.php" /> <option value="$PROJECT_DIR$/tests/Pecee/SimpleRouter/Dummy/Handler/ExceptionHandlerFirst.php" />
<option value="$PROJECT_DIR$/tests/Pecee/SimpleRouter/Dummy/Handler/ExceptionHandlerSecond.php" /> <option value="$PROJECT_DIR$/tests/Pecee/SimpleRouter/Dummy/Handler/ExceptionHandlerSecond.php" />
<option value="$PROJECT_DIR$/tests/TestRouter.php" /> <option value="$PROJECT_DIR$/tests/TestRouter.php" />
<option value="$PROJECT_DIR$/tests/Pecee/SimpleRouter/RouterUrlTest.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Event/IEventArgument.php" /> <option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Event/IEventArgument.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/IRouterBootManager.php" /> <option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/IRouterBootManager.php" />
<option value="$PROJECT_DIR$/tests/Pecee/SimpleRouter/Dummy/Security/SilentTokenProvider.php" /> <option value="$PROJECT_DIR$/tests/Pecee/SimpleRouter/Dummy/Security/SilentTokenProvider.php" />
<option value="$PROJECT_DIR$/tests/Pecee/SimpleRouter/Dummy/Managers/TestBootManager.php" /> <option value="$PROJECT_DIR$/tests/Pecee/SimpleRouter/Dummy/Managers/TestBootManager.php" />
<option value="$PROJECT_DIR$/src/Pecee/Http/Middleware/BaseCsrfVerifier.php" />
<option value="$PROJECT_DIR$/src/Pecee/Http/Security/CookieTokenProvider.php" /> <option value="$PROJECT_DIR$/src/Pecee/Http/Security/CookieTokenProvider.php" />
<option value="$PROJECT_DIR$/src/Pecee/Http/Security/ITokenProvider.php" /> <option value="$PROJECT_DIR$/src/Pecee/Http/Security/ITokenProvider.php" />
<option value="$PROJECT_DIR$/src/Pecee/Http/Request.php" />
<option value="$PROJECT_DIR$/src/Pecee/Http/Response.php" /> <option value="$PROJECT_DIR$/src/Pecee/Http/Response.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/IRoute.php" /> <option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/IRoute.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteController.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteGroup.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RoutePartialGroup.php" /> <option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RoutePartialGroup.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteResource.php" />
<option value="$PROJECT_DIR$/tests/Pecee/SimpleRouter/InputHandlerTest.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Handlers/IEventHandler.php" /> <option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Handlers/IEventHandler.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Handlers/DebugEventHandler.php" /> <option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Handlers/DebugEventHandler.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Event/EventArgument.php" /> <option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Event/EventArgument.php" />
@@ -224,18 +231,25 @@
<option value="$PROJECT_DIR$/src/Pecee/Http/Input/IInputItem.php" /> <option value="$PROJECT_DIR$/src/Pecee/Http/Input/IInputItem.php" />
<option value="$PROJECT_DIR$/src/Pecee/Http/Input/InputItem.php" /> <option value="$PROJECT_DIR$/src/Pecee/Http/Input/InputItem.php" />
<option value="$PROJECT_DIR$/src/Pecee/Http/Input/InputFile.php" /> <option value="$PROJECT_DIR$/src/Pecee/Http/Input/InputFile.php" />
<option value="$PROJECT_DIR$/helpers.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/Route.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/SimpleRouter.php" />
<option value="$PROJECT_DIR$/src/Pecee/Http/Url.php" />
<option value="$PROJECT_DIR$/src/Pecee/Http/Input/InputHandler.php" />
<option value="$PROJECT_DIR$/README.md" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/ILoadableRoute.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/LoadableRoute.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Router.php" />
<option value="$PROJECT_DIR$/tests/Pecee/SimpleRouter/EventHandlerTest.php" /> <option value="$PROJECT_DIR$/tests/Pecee/SimpleRouter/EventHandlerTest.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Handlers/EventHandler.php" /> <option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Handlers/EventHandler.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteGroup.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteResource.php" />
<option value="$PROJECT_DIR$/src/Pecee/Http/Url.php" />
<option value="$PROJECT_DIR$/tests/Pecee/SimpleRouter/RouterUrlTest.php" />
<option value="$PROJECT_DIR$/src/Pecee/Http/Middleware/BaseCsrfVerifier.php" />
<option value="$PROJECT_DIR$/README.md" />
<option value="$PROJECT_DIR$/src/Pecee/Http/Request.php" />
<option value="$PROJECT_DIR$/tests/Pecee/SimpleRouter/InputHandlerTest.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/LoadableRoute.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteController.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/ILoadableRoute.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteUrl.php" /> <option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteUrl.php" />
<option value="$PROJECT_DIR$/src/Pecee/Http/Input/InputHandler.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/Route.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/Router.php" />
<option value="$PROJECT_DIR$/src/Pecee/SimpleRouter/SimpleRouter.php" />
<option value="$PROJECT_DIR$/helpers.php" />
</list> </list>
</option> </option>
</component> </component>
@@ -378,19 +392,6 @@
<item name="simple-php-router" type="2a2b976b:PhpTreeStructureProvider$1" /> <item name="simple-php-router" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="tests" type="2a2b976b:PhpTreeStructureProvider$1" /> <item name="tests" type="2a2b976b:PhpTreeStructureProvider$1" />
</path> </path>
<path>
<item name="simple-php-router" type="b2602c69:ProjectViewProjectNode" />
<item name="simple-php-router" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="tests" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="Pecee" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="simple-php-router" type="b2602c69:ProjectViewProjectNode" />
<item name="simple-php-router" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="tests" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="Pecee" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="SimpleRouter" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
</expand> </expand>
<select /> <select />
</subPane> </subPane>
@@ -437,7 +438,7 @@
</list> </list>
</option> </option>
</component> </component>
<component name="RunManager" selected="PHPUnit.EventHandlerTest"> <component name="RunManager" selected="PHPUnit.phpunit.xml">
<configuration name="EventHandlerTest" type="PHPUnitRunConfigurationType" factoryName="PHPUnit" temporary="true"> <configuration name="EventHandlerTest" type="PHPUnitRunConfigurationType" factoryName="PHPUnit" temporary="true">
<TestRunner class="EventHandlerTest" file="$PROJECT_DIR$/tests/Pecee/SimpleRouter/EventHandlerTest.php" scope="Class" /> <TestRunner class="EventHandlerTest" file="$PROJECT_DIR$/tests/Pecee/SimpleRouter/EventHandlerTest.php" scope="Class" />
</configuration> </configuration>
@@ -460,8 +461,8 @@
</list> </list>
<recent_temporary> <recent_temporary>
<list> <list>
<item itemvalue="PHPUnit.EventHandlerTest" />
<item itemvalue="PHPUnit.phpunit.xml" /> <item itemvalue="PHPUnit.phpunit.xml" />
<item itemvalue="PHPUnit.EventHandlerTest" />
<item itemvalue="PHPUnit.tests" /> <item itemvalue="PHPUnit.tests" />
<item itemvalue="PHP Script.debug.php" /> <item itemvalue="PHP Script.debug.php" />
<item itemvalue="PHPUnit.RouterUrlTest" /> <item itemvalue="PHPUnit.RouterUrlTest" />
@@ -539,44 +540,45 @@
<workItem from="1522507670882" duration="309000" /> <workItem from="1522507670882" duration="309000" />
<workItem from="1522508007514" duration="2427000" /> <workItem from="1522508007514" duration="2427000" />
<workItem from="1522530661439" duration="3502000" /> <workItem from="1522530661439" duration="3502000" />
<workItem from="1522668357317" duration="2371000" /> <workItem from="1522668357317" duration="4847000" />
<workItem from="1523014652739" duration="11926000" />
</task> </task>
<servers /> <servers />
</component> </component>
<component name="TestHistory"> <component name="TestHistory">
<history-entry file="phpunit_xml - 2018.04.02 at 13h 40m 00s.xml"> <history-entry file="phpunit_xml - 2018.04.06 at 16h 11m 34s.xml">
<configuration name="phpunit.xml" configurationId="PHPUnitRunConfigurationType" /> <configuration name="phpunit.xml" configurationId="PHPUnitRunConfigurationType" />
</history-entry> </history-entry>
<history-entry file="phpunit_xml - 2018.04.02 at 13h 40m 14s.xml"> <history-entry file="phpunit_xml - 2018.04.06 at 16h 11m 56s.xml">
<configuration name="phpunit.xml" configurationId="PHPUnitRunConfigurationType" /> <configuration name="phpunit.xml" configurationId="PHPUnitRunConfigurationType" />
</history-entry> </history-entry>
<history-entry file="phpunit_xml - 2018.04.02 at 13h 40m 37s.xml"> <history-entry file="phpunit_xml - 2018.04.06 at 16h 12m 06s.xml">
<configuration name="phpunit.xml" configurationId="PHPUnitRunConfigurationType" /> <configuration name="phpunit.xml" configurationId="PHPUnitRunConfigurationType" />
</history-entry> </history-entry>
<history-entry file="phpunit_xml - 2018.04.02 at 13h 40m 42s.xml"> <history-entry file="phpunit_xml - 2018.04.06 at 16h 12m 15s.xml">
<configuration name="phpunit.xml" configurationId="PHPUnitRunConfigurationType" /> <configuration name="phpunit.xml" configurationId="PHPUnitRunConfigurationType" />
</history-entry> </history-entry>
<history-entry file="phpunit_xml - 2018.04.02 at 13h 43m 05s.xml"> <history-entry file="phpunit_xml - 2018.04.06 at 16h 53m 38s.xml">
<configuration name="phpunit.xml" configurationId="PHPUnitRunConfigurationType" /> <configuration name="phpunit.xml" configurationId="PHPUnitRunConfigurationType" />
</history-entry> </history-entry>
<history-entry file="phpunit_xml - 2018.04.02 at 13h 43m 07s.xml"> <history-entry file="phpunit_xml - 2018.04.06 at 16h 54m 36s.xml">
<configuration name="phpunit.xml" configurationId="PHPUnitRunConfigurationType" /> <configuration name="phpunit.xml" configurationId="PHPUnitRunConfigurationType" />
</history-entry> </history-entry>
<history-entry file="phpunit_xml - 2018.04.02 at 14h 48m 41s.xml"> <history-entry file="phpunit_xml - 2018.04.06 at 16h 55m 10s.xml">
<configuration name="phpunit.xml" configurationId="PHPUnitRunConfigurationType" /> <configuration name="phpunit.xml" configurationId="PHPUnitRunConfigurationType" />
</history-entry> </history-entry>
<history-entry file="EventHandlerTest - 2018.04.02 at 14h 50m 26s.xml"> <history-entry file="phpunit_xml - 2018.04.06 at 16h 55m 25s.xml">
<configuration name="EventHandlerTest" configurationId="PHPUnitRunConfigurationType" /> <configuration name="phpunit.xml" configurationId="PHPUnitRunConfigurationType" />
</history-entry> </history-entry>
<history-entry file="EventHandlerTest - 2018.04.02 at 14h 50m 34s.xml"> <history-entry file="phpunit_xml - 2018.04.06 at 16h 57m 00s.xml">
<configuration name="EventHandlerTest" configurationId="PHPUnitRunConfigurationType" /> <configuration name="phpunit.xml" configurationId="PHPUnitRunConfigurationType" />
</history-entry> </history-entry>
<history-entry file="EventHandlerTest - 2018.04.02 at 14h 51m 17s.xml"> <history-entry file="phpunit_xml - 2018.04.06 at 16h 57m 10s.xml">
<configuration name="EventHandlerTest" configurationId="PHPUnitRunConfigurationType" /> <configuration name="phpunit.xml" configurationId="PHPUnitRunConfigurationType" />
</history-entry> </history-entry>
</component> </component>
<component name="TimeTrackingManager"> <component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="146739000" /> <option name="totallyTimeSpent" value="161141000" />
</component> </component>
<component name="TodoView"> <component name="TodoView">
<todo-panel id="selected-file"> <todo-panel id="selected-file">
@@ -594,16 +596,17 @@
<window_info anchor="bottom" id="TODO" order="11" weight="0.32983023" /> <window_info anchor="bottom" id="TODO" order="11" weight="0.32983023" />
<window_info anchor="bottom" id="Event Log" order="7" sideWeight="0.50919265" side_tool="true" weight="0.32902184" /> <window_info anchor="bottom" id="Event Log" order="7" sideWeight="0.50919265" side_tool="true" weight="0.32902184" />
<window_info anchor="bottom" id="Database Changes" order="13" show_stripe_button="false" /> <window_info anchor="bottom" id="Database Changes" order="13" show_stripe_button="false" />
<window_info active="true" anchor="bottom" id="Run" order="2" sideWeight="0.49080735" visible="true" weight="0.3272727" /> <window_info anchor="bottom" id="Run" order="2" sideWeight="0.49080735" weight="0.3272727" />
<window_info anchor="bottom" id="Version Control" order="14" weight="0.32902184" /> <window_info anchor="bottom" id="Version Control" order="14" weight="0.32828283" />
<window_info anchor="bottom" id="Terminal" order="12" sideWeight="0.49680257" weight="0.28282827" /> <window_info anchor="bottom" id="Terminal" order="12" sideWeight="0.49680257" visible="true" weight="0.28282827" />
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.2027972" /> <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.20479521" />
<window_info anchor="bottom" id="Docker" order="8" show_stripe_button="false" /> <window_info anchor="bottom" id="Docker" order="8" show_stripe_button="false" />
<window_info anchor="bottom" id="Inspection Results" order="15" weight="0.32828283" />
<window_info anchor="right" id="Database" order="3" /> <window_info anchor="right" id="Database" order="3" />
<window_info anchor="bottom" id="Find" order="1" sideWeight="0.48880896" weight="0.3272727" /> <window_info anchor="bottom" id="Find" order="1" sideWeight="0.48880896" weight="0.3272727" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" /> <window_info id="Structure" order="1" weight="0.24975026" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.4" /> <window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
<window_info id="Favorites" order="2" side_tool="true" /> <window_info id="Favorites" order="2" weight="0.32967034" />
<window_info anchor="bottom" id="Message" order="0" /> <window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="6" weight="0.4" /> <window_info anchor="bottom" id="Inspection" order="6" weight="0.4" />
@@ -611,7 +614,6 @@
<window_info anchor="right" id="Commander" order="0" weight="0.4" /> <window_info anchor="right" id="Commander" order="0" weight="0.4" />
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
<window_info anchor="bottom" id="PHP-CGI Server" order="10" /> <window_info anchor="bottom" id="PHP-CGI Server" order="10" />
<window_info anchor="bottom" id="Inspection Results" order="15" weight="0.32828283" />
<window_info anchor="bottom" id="REST Client" order="5" weight="0.32929292" /> <window_info anchor="bottom" id="REST Client" order="5" weight="0.32929292" />
<window_info anchor="bottom" id="Command Line Tools Console" order="9" weight="0.32928804" /> <window_info anchor="bottom" id="Command Line Tools Console" order="9" weight="0.32928804" />
</layout> </layout>
@@ -628,66 +630,6 @@
</breakpoint-manager> </breakpoint-manager>
</component> </component>
<component name="editorHistoryManager"> <component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/Pecee/Http/Input/IInputItem.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="380">
<caret line="19" column="40" selection-start-line="19" selection-start-column="40" selection-end-line="19" selection-end-column="40" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/README.md">
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
<state split_layout="SPLIT">
<first_editor relative-caret-position="7400">
<caret line="370" column="1" selection-start-line="370" selection-start-column="1" selection-end-line="370" selection-end-column="1" />
</first_editor>
<second_editor />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Router.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="9860">
<caret line="509" column="45" selection-start-line="509" selection-start-column="45" selection-end-line="509" selection-end-column="45" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/helpers.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1420">
<caret line="74" selection-end-line="87" selection-end-column="1" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/SimpleRouter.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="5160">
<caret line="283" column="39" selection-start-line="283" selection-start-column="39" selection-end-line="283" selection-end-column="39" />
<folding>
<element signature="e#302#319#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/Http/Input/InputHandler.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="4460">
<caret line="224" column="80" selection-start-line="224" selection-start-column="80" selection-end-line="224" selection-end-column="80" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/IRouterBootManager.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="264">
<caret line="11" column="28" selection-start-line="11" selection-start-column="28" selection-end-line="11" selection-end-column="28" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/IGroupRoute.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-288" />
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Handlers/IExceptionHandler.php"> <entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Handlers/IExceptionHandler.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="48"> <state relative-caret-position="48">
@@ -695,13 +637,6 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/IRoute.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="258">
<caret line="27" column="20" selection-start-line="27" selection-start-column="20" selection-end-line="27" selection-end-column="20" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Handlers/DebugEventHandler.php"> <entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Handlers/DebugEventHandler.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="168"> <state relative-caret-position="168">
@@ -783,13 +718,6 @@
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/tmp/CompiledContainer.php" /> <entry file="file://$PROJECT_DIR$/tmp/CompiledContainer.php" />
<entry file="file://$PROJECT_DIR$/tests/TestRouter.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="474">
<caret line="24" column="30" selection-start-line="24" selection-start-column="30" selection-end-line="24" selection-end-column="30" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/composer.json"> <entry file="file://$PROJECT_DIR$/composer.json">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="370"> <state relative-caret-position="370">
@@ -811,13 +739,6 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/tests/Pecee/SimpleRouter/InputHandlerTest.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="267">
<caret line="16" column="8" selection-start-line="16" selection-start-column="8" selection-end-line="16" selection-end-column="8" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tests/Pecee/SimpleRouter/RouterRouteTest.php"> <entry file="file://$PROJECT_DIR$/tests/Pecee/SimpleRouter/RouterRouteTest.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="572"> <state relative-caret-position="572">
@@ -839,13 +760,6 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/Http/Request.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="316">
<caret line="223" column="5" selection-start-line="223" selection-start-column="5" selection-end-line="223" selection-end-column="5" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/Http/Input/IInputItem.php"> <entry file="file://$PROJECT_DIR$/src/Pecee/Http/Input/IInputItem.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="380"> <state relative-caret-position="380">
@@ -867,101 +781,9 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/Http/Url.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="6160">
<caret line="308" column="7" selection-start-line="308" selection-start-column="7" selection-end-line="308" selection-end-column="7" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/helpers.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1520">
<caret line="79" column="30" selection-start-line="79" selection-start-column="30" selection-end-line="79" selection-end-column="30" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/Http/Input/InputHandler.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="191">
<caret line="255" column="7" selection-start-line="255" selection-start-column="7" selection-end-line="255" selection-end-column="7" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/SimpleRouter.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="165">
<caret line="60" column="4" lean-forward="true" selection-start-line="60" selection-start-column="4" selection-end-line="63" selection-end-column="5" />
<folding>
<element signature="e#302#319#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/README.md">
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
<state split_layout="SPLIT">
<first_editor relative-caret-position="230">
<caret line="1298" column="39" selection-start-line="1298" selection-start-column="39" selection-end-line="1298" selection-end-column="39" />
</first_editor>
<second_editor />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/ILoadableRoute.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="362">
<caret line="42" column="18" selection-start-line="42" selection-start-column="18" selection-end-line="42" selection-end-column="18" />
<folding>
<element signature="e#44#67#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="213">
<caret line="15" column="13" selection-start-line="15" selection-start-column="13" selection-end-line="15" selection-end-column="13" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteResource.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="213">
<caret line="33" column="13" selection-start-line="33" selection-start-column="13" selection-end-line="33" selection-end-column="13" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/LoadableRoute.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="146">
<caret line="92" column="7" lean-forward="true" selection-start-line="92" selection-start-column="7" selection-end-line="92" selection-end-column="7" />
<folding>
<element signature="e#44#82#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/Route.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="211">
<caret line="239" column="10" selection-start-line="239" selection-start-column="10" selection-end-line="239" selection-end-column="10" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Router.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="245">
<caret line="156" selection-start-line="156" selection-end-line="156" />
<folding>
<element signature="e#38#84#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Handlers/EventHandler.php"> <entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Handlers/EventHandler.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-742"> <state relative-caret-position="540">
<caret line="28" selection-start-line="28" selection-end-line="28" /> <caret line="28" selection-start-line="28" selection-end-line="28" />
<folding> <folding>
<element signature="e#47#90#0#PHP" expanded="true" /> <element signature="e#47#90#0#PHP" expanded="true" />
@@ -971,18 +793,198 @@
</entry> </entry>
<entry file="file://$PROJECT_DIR$/tests/Pecee/SimpleRouter/EventHandlerTest.php"> <entry file="file://$PROJECT_DIR$/tests/Pecee/SimpleRouter/EventHandlerTest.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="278"> <state relative-caret-position="1860">
<caret line="88" column="13" lean-forward="true" selection-start-line="88" selection-start-column="13" selection-end-line="88" selection-end-column="13" /> <caret line="94" column="24" selection-start-line="94" selection-start-column="24" selection-end-line="94" selection-end-column="24" />
<folding> <folding>
<element signature="e#249#292#0#PHP" expanded="true" /> <element signature="e#249#292#0#PHP" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/IPartialGroupRoute.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="80">
<caret line="4" column="10" selection-start-line="4" selection-start-column="10" selection-end-line="4" selection-end-column="10" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteResource.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="403">
<caret line="94" column="116" selection-start-line="94" selection-start-column="116" selection-end-line="94" selection-end-column="116" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/Http/Response.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-2096" />
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/README.md">
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
<state split_layout="SPLIT">
<first_editor relative-caret-position="165">
<caret line="1202" lean-forward="true" selection-start-line="1202" selection-end-line="1202" />
</first_editor>
<second_editor />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/vendor/phpunit/phpunit/src/Framework/TestCase.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-687">
<caret line="100" column="15" selection-start-line="100" selection-start-column="15" selection-end-line="100" selection-end-column="15" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/Http/Middleware/BaseCsrfVerifier.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="213">
<caret line="69" column="56" selection-start-line="69" selection-start-column="56" selection-end-line="69" selection-end-column="56" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/Http/Request.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="286">
<caret line="88" column="24" lean-forward="true" selection-start-line="88" selection-start-column="24" selection-end-line="88" selection-end-column="35" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tests/Pecee/SimpleRouter/MiddlewareTest.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="120">
<caret line="6" column="53" lean-forward="true" selection-start-line="6" selection-start-column="53" selection-end-line="6" selection-end-column="53" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tests/Pecee/SimpleRouter/RouterUrlTest.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-34">
<caret line="85" selection-start-line="85" selection-end-line="85" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/vendor/phpunit/phpunit/src/Framework/Assert.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="333">
<caret line="1197" column="27" selection-start-line="1197" selection-start-column="27" selection-end-line="1197" selection-end-column="27" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tests/Pecee/SimpleRouter/InputHandlerTest.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1806">
<caret line="93" column="63" selection-start-line="93" selection-start-column="63" selection-end-line="93" selection-end-column="63" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/Http/Url.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="86">
<caret line="25" column="20" selection-start-line="25" selection-start-column="20" selection-end-line="25" selection-end-column="20" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteGroup.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="716">
<caret line="55" column="45" selection-start-line="55" selection-start-column="45" selection-end-line="55" selection-end-column="45" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tests/TestRouter.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="240">
<caret line="12" selection-start-line="12" selection-end-line="12" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/LoadableRoute.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="20">
<caret line="71" column="33" selection-start-line="71" selection-start-column="27" selection-end-line="71" selection-end-column="33" />
<folding>
<element signature="e#44#82#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="20">
<caret line="15" column="22" lean-forward="true" selection-start-line="15" selection-start-column="22" selection-end-line="15" selection-end-column="22" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/IRoute.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="224">
<caret line="39" column="10" selection-start-line="39" selection-start-column="10" selection-end-line="39" selection-end-column="10" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/ILoadableRoute.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="204">
<caret line="32" column="36" selection-start-line="32" selection-start-column="30" selection-end-line="32" selection-end-column="36" />
<folding>
<element signature="e#44#67#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteUrl.php"> <entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/RouteUrl.php">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="300"> <state relative-caret-position="200">
<caret line="21" column="50" lean-forward="true" selection-start-line="21" selection-start-column="50" selection-end-line="21" selection-end-column="50" /> <caret line="10" column="22" lean-forward="true" selection-start-line="10" selection-start-column="22" selection-end-line="10" selection-end-column="22" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/Http/Input/InputHandler.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="425">
<caret line="280" column="38" selection-start-line="280" selection-start-column="38" selection-end-line="280" selection-end-column="38" />
<folding>
<element signature="e#36#82#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Route/Route.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="162">
<caret line="498" column="61" selection-start-line="498" selection-start-column="61" selection-end-line="498" selection-end-column="61" />
<folding>
<element signature="e#44#82#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/Router.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="220">
<caret line="517" lean-forward="true" selection-start-line="517" selection-end-line="517" />
<folding>
<element signature="e#38#84#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Pecee/SimpleRouter/SimpleRouter.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="505">
<caret line="63" selection-start-line="63" selection-end-line="63" />
<folding>
<element signature="e#302#319#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/helpers.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="180">
<caret line="51" column="59" selection-start-line="51" selection-start-column="59" selection-end-line="51" selection-end-column="59" />
</state> </state>
</provider> </provider>
</entry> </entry>
+126 -71
View File
@@ -1,7 +1,16 @@
# simple-router # simple-router
Simple, fast and yet powerful PHP router that is easy to get integrated and in any project. Simple, fast and yet powerful PHP router that is easy to get integrated and in any project. Heavily inspired by the way Laravel handles routing, with both simplicity and expand-ability in mind.
Heavily inspired by the way Laravel handles routing, with both simplicity and expand-ability in mind.
With simple-router you can create a new project fast, without depending on a framework.
**It only takes a few lines of code to get started:**
```php
SimpleRouter::get('/', function() {
return 'Hello world';
});
```
### Support the project ### Support the project
@@ -84,6 +93,9 @@ You can donate any amount of your choice by [clicking here](https://www.paypal.c
- [Extending](#extending) - [Extending](#extending)
- [Help and support](#help-and-support) - [Help and support](#help-and-support)
- [Common issues and fixes](#common-issues-and-fixes) - [Common issues and fixes](#common-issues-and-fixes)
- [Multiple routes matches? Which one has the priority?](#multiple-routes-matches-which-one-has-the-priority)
- [Parameters won't match or route not working with special characters](#parameters-wont-match-or-route-not-working-with-special-characters)
- [Using the router on sub-paths](#using-the-router-on-sub-paths)
- [Debugging](#debugging) - [Debugging](#debugging)
- [Creating unit-tests](#creating-unit-tests) - [Creating unit-tests](#creating-unit-tests)
- [Debug information](#debug-information) - [Debug information](#debug-information)
@@ -229,7 +241,9 @@ Simply create a new `web.config` file in your projects `public` directory and pa
#### Troubleshooting #### Troubleshooting
If you do not have a `favicon.ico` file in your project, you can get a `NotFoundHttpException` (404 - not found). If you do not have a `favicon.ico` file in your project, you can get a `NotFoundHttpException` (404 - not found).
To add `favicon.ico` to the IIS ignore-list, add the following line to the `<conditions>` group: To add `favicon.ico` to the IIS ignore-list, add the following line to the `<conditions>` group:
``` ```
<add input="{REQUEST_FILENAME}" negate="true" pattern="favicon.ico" ignoreCase="true" /> <add input="{REQUEST_FILENAME}" negate="true" pattern="favicon.ico" ignoreCase="true" />
``` ```
@@ -239,7 +253,9 @@ You can also make one exception for files with some extensions:
<add input="{REQUEST_FILENAME}" pattern="\.ico|\.png|\.css|\.jpg" negate="true" ignoreCase="true" /> <add input="{REQUEST_FILENAME}" pattern="\.ico|\.png|\.css|\.jpg" negate="true" ignoreCase="true" />
``` ```
If you are using `$_SERVER['ORIG_PATH_INFO']`, you will get `\index.php\` as part of the returned value. For example: If you are using `$_SERVER['ORIG_PATH_INFO']`, you will get `\index.php\` as part of the returned value.
**Example:**
``` ```
/index.php/test/mypage.php /index.php/test/mypage.php
``` ```
@@ -332,12 +348,12 @@ function request(): Request
* @param string|null $index Parameter index name * @param string|null $index Parameter index name
* @param string|null $defaultValue Default return value * @param string|null $defaultValue Default return value
* @param array ...$methods Default methods * @param array ...$methods Default methods
* @return \Pecee\Http\Input\InputHandler|string * @return \Pecee\Http\Input\InputHandler|array|string|null
*/ */
function input($index = null, $defaultValue = null, ...$methods) function input($index = null, $defaultValue = null, ...$methods)
{ {
if ($index !== null) { if ($index !== null) {
return request()->getInputHandler()->getValue($index, $defaultValue, ...$methods); return request()->getInputHandler()->value($index, $defaultValue, ...$methods);
} }
return request()->getInputHandler(); return request()->getInputHandler();
@@ -383,7 +399,7 @@ Below is a very basic example of setting up a route. First parameter is the url
```php ```php
SimpleRouter::get('/', function() { SimpleRouter::get('/', function() {
return 'Hello world'; return 'Hello world';
}); });
``` ```
@@ -406,11 +422,11 @@ Sometimes you might need to create a route that accepts multiple HTTP-verbs. If
```php ```php
SimpleRouter::match(['get', 'post'], '/', function() { SimpleRouter::match(['get', 'post'], '/', function() {
// ... // ...
}); });
SimpleRouter::any('foo', function() { SimpleRouter::any('foo', function() {
// ... // ...
}); });
``` ```
@@ -418,7 +434,7 @@ We've created a simple method which matches `GET` and `POST` which is most commo
```php ```php
SimpleRouter::form('foo', function() { SimpleRouter::form('foo', function() {
// ... // ...
}); });
``` ```
@@ -430,7 +446,7 @@ You'll properly wondering by know how you parse parameters from your urls. For e
```php ```php
SimpleRouter::get('/user/{id}', function ($userId) { SimpleRouter::get('/user/{id}', function ($userId) {
return 'User with id: ' . $userId; return 'User with id: ' . $userId;
}); });
``` ```
@@ -438,7 +454,7 @@ You may define as many route parameters as required by your route:
```php ```php
SimpleRouter::get('/posts/{post}/comments/{comment}', function ($postId, $commentId) { SimpleRouter::get('/posts/{post}/comments/{comment}', function ($postId, $commentId) {
// ... // ...
}); });
``` ```
@@ -450,11 +466,11 @@ Occasionally you may need to specify a route parameter, but make the presence of
```php ```php
SimpleRouter::get('/user/{name?}', function ($name = null) { SimpleRouter::get('/user/{name?}', function ($name = null) {
return $name; return $name;
}); });
SimpleRouter::get('/user/{name?}', function ($name = 'Simon') { SimpleRouter::get('/user/{name?}', function ($name = 'Simon') {
return $name; return $name;
}); });
``` ```
@@ -464,15 +480,21 @@ You may constrain the format of your route parameters using the where method on
```php ```php
SimpleRouter::get('/user/{name}', function ($name) { SimpleRouter::get('/user/{name}', function ($name) {
//
// ... do stuff
})->where('name', '[A-Za-z]+'); })->where('name', '[A-Za-z]+');
SimpleRouter::get('/user/{id}', function ($id) { SimpleRouter::get('/user/{id}', function ($id) {
//
// ... do stuff
})->where('id', '[0-9]+'); })->where('id', '[0-9]+');
SimpleRouter::get('/user/{id}/{name}', function ($id, $name) { SimpleRouter::get('/user/{id}/{name}', function ($id, $name) {
//
// ... do stuff
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']); })->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
``` ```
@@ -1136,9 +1158,7 @@ In the example below, we check if the current url contains the `/api` part.
```php ```php
if(url()->contains('/api')) { if(url()->contains('/api')) {
// ... do stuff // ... do stuff
} }
``` ```
@@ -1156,86 +1176,82 @@ For more available methods please check the `Pecee\Http\Url` class.
# Input & parameters # Input & parameters
simple-router offers libraries and helpers that makes it easy to manage and manipulate input-parameters like `$_POST`, `$_GET` and `$_FILE`.
## Using the Input class to manage parameters ## Using the Input class to manage parameters
We've added the `Input` class to easy access and manage parameters from your Controller-classes. You can use the `InputHandler` class to easily access and manage parameters from your request. The `InputHandler` class offers extended features such as copying/moving uploaded files directly on the object, getting file-extension, mime-type etc.
### Get single parameter value: ### Get single parameter value
If items is grouped in the html, it will return an array of items. ```input($index, $defaultValue, ...$methods);```
**Note:** `get` will automatically trim the value and ensure that it's not empty. If it's empty the `$defaultValue` will be returned. To quickly get a value from a parameter, you can use the `input` helper function.
This will automatically trim the value and ensure that it's not empty. If it's empty the `$defaultValue` will be returned instead.
**Note:**
This function returns a `string` unless the parameters are grouped together, in that case it will return an `array` of values.
**Example:**
This example matches both POST and GET request-methods and if name is empty the default-value "Guest" will be returned.
```php ```php
$value = input($index, $defaultValue, $methods); $name = input('name', 'Guest', 'post', 'get');
``` ```
### Get parameter object ### Get parameter object
The example below will return an instance of `InputItem` or `InputFile` depending on the type. When dealing with file-uploads it can be useful to retrieve the raw parameter object.
You can use this in your html as it will render the value of the item. **Search for object with default-value across multiple or specific request-methods:**
If you want to compare value in your if statements, you have to use the `getValue` or use the `input()` helper function instead. The example below will return an `InputItem` object if the parameter was found or return the `$defaultValue`. If parameters are grouped, it will return an array of `InputItem` objects.
If items is grouped in the html, it will return an array of items.
```php ```php
$object = input()->get($index, $defaultValue = null, $methods = null); $object = input()->find($index, $defaultValue = null, ...$methods);
``` ```
### Return specific GET parameter (where name is the name of your parameter): **Getting specific `$_GET` parameter as `InputItem` object:**
The example below will return an `InputItem` object if the parameter was found or return the `$defaultValue`. If parameters are grouped, it will return an array of `InputItem` objects.
```php ```php
# -- match any (default) -- $object = input()->get($index, $defaultValue = null);
```
/* **Getting specific `$_POST` parameter as `InputItem` object:**
* This is the recommended way to go for normal usage
* as it will strip empty values, ensuring that
* $defaultValue is returned if the value is empty.
*/
$id = input()->getValue($index, $defaultValue, $method); The example below will return an `InputItem` object if the parameter was found or return the `$defaultValue`. If parameters are grouped, it will return an array of `InputItem` objects.
# -- shortcut to above -- ```php
$object = input()->post($index, $defaultValue = null);
```
$id = input($index, $defaultValue, $method); **Getting specific `$_FILE` parameter as `InputFile` object:**
# -- match specific -- The example below will return an `InputFile` object if the parameter was found or return the `$defaultValue`. If parameters are grouped, it will return an array of `InputFile` objects.
$value = input($index, $defaultValue, 'get'); ```php
$value = input($index, $defaultValue, 'post'); $object = input()->file($index, $defaultValue = null);
$value = input($index, $defaultValue, 'file');
# -- or --
$object = input()->findGet($index, $defaultValue);
$object = input()->findPost($index, $defaultValue);
$object = input()->findFile($index, $defaultValue);
# -- get the full object --
$object = input()->get($index, 'post', 'get');
``` ```
### Managing files ### Managing files
```php ```php
/** /**
* In this small example we loop through a collection of files * Loop through a collection of files uploaded from a form on the page like this
* added on the page like this
* <input type="file" name="images[]" /> * <input type="file" name="images[]" />
*/ */
/* @var $image \Pecee\Http\Input\InputFile */ /* @var $image \Pecee\Http\Input\InputFile */
foreach(input('images', []) as $image) foreach(input()->file('images', []) as $image)
{ {
if($image->getMime() === 'image/jpeg') { if($image->getMime() === 'image/jpeg')
{
$destinationFilname = sprintf('%s.%s', uniqid(), $image->getExtension()); $destinationFilname = sprintf('%s.%s', uniqid(), $image->getExtension());
$image->move(sprintf('/uploads/%s', $destinationFilename));
$image->move('/uploads/' . $destinationFilename);
} }
} }
@@ -1244,10 +1260,10 @@ foreach(input('images', []) as $image)
### Get all parameters ### Get all parameters
```php ```php
// Get all # Get all
$values = input()->all(); $values = input()->all();
// Only match certain keys # Only match specific keys
$values = input()->all([ $values = input()->all([
'company_name', 'company_name',
'user_id' 'user_id'
@@ -1261,6 +1277,7 @@ All object implements the `IInputItem` interface and will always contain these m
- `getValue()` - returns the value of the input. - `getValue()` - returns the value of the input.
`InputFile` has the same methods as above along with some other file-specific methods like: `InputFile` has the same methods as above along with some other file-specific methods like:
- `getFilename` - get the filename. - `getFilename` - get the filename.
- `getTmpName()` - get file temporary name. - `getTmpName()` - get file temporary name.
- `getSize()` - get file size. - `getSize()` - get file size.
@@ -1268,16 +1285,9 @@ All object implements the `IInputItem` interface and will always contain these m
- `getContents()` - get file content. - `getContents()` - get file content.
- `getType()` - get mime-type for file. - `getType()` - get mime-type for file.
- `getError()` - get file upload error. - `getError()` - get file upload error.
- `hasError()` - returns `bool` if an error occurred while uploading (if getError is not 0). - `hasError()` - returns `bool` if an error occurred while uploading (if `getError` is not 0).
- `toArray()` - returns raw array - `toArray()` - returns raw array
Below example requires you to have the helper functions added. Please refer to the helper functions section in the documentation.
```php
/* Get parameter site_id or default-value 2 from either post-value or query-string */
$siteId = input('site_id', 2, ['post', 'get']);
```
--- ---
# Events # Events
@@ -1560,6 +1570,51 @@ This section will go into details on how to debug the router and answer some of
This section will go over common issues and how to resolve them. This section will go over common issues and how to resolve them.
### Parameters won't match or route not working with special characters
Often people experience this issue when one or more parameters contains special characters. The router uses a sparse regular-expression that matches letters from a-z along with numbers when matching parameters, to improve performance.
All other characters has to be defined via the `defaultParameterRegex` option on your route.
You can read more about adding your own custom regular expression for matching parameters by [clicking here](#custom-regex-for-matching-parameters).
### Multiple routes matches? Which one has the priority?
The router will match routes in the order they're added.
It's possible to render multiple routes.
If you want the router to stop when a route is matched, you simply return a value in your callback or stop the execution manually (using `response()->json()` etc.).
Any returned objects that implements the `__toString()` magic method will also prevent other routes from being rendered.
### Using the router on sub-paths
Using the library on a sub-path like `localhost/project/` is not officially supported, however it is possible to get it working quite easily.
Add an event that appends your sub-path when a new loadable route is added.
**Example:**
```php
// ... your routes.php file
if($isRunningLocally) {
$eventHandler = new EventHandler();
$eventHandler->register(EventHandler::EVENT_ADD_ROUTE, function (EventArgument $arg) use (&$status) {
if ($arg->route instanceof \Pecee\SimpleRouter\Route\LoadableRoute) {
$arg->route->prependUrl('/local-path');
}
});
TestRouter::addEventHandler($eventHandler);
}
```
## Debugging ## Debugging
This section will show you how to write unit-tests for the router, view useful debugging information and answer some of the frequently asked questions. This section will show you how to write unit-tests for the router, view useful debugging information and answer some of the frequently asked questions.
+2 -2
View File
@@ -49,12 +49,12 @@ function request(): Request
* @param string|null $index Parameter index name * @param string|null $index Parameter index name
* @param string|null $defaultValue Default return value * @param string|null $defaultValue Default return value
* @param array ...$methods Default methods * @param array ...$methods Default methods
* @return \Pecee\Http\Input\InputHandler|string * @return \Pecee\Http\Input\InputHandler|array|string|null
*/ */
function input($index = null, $defaultValue = null, ...$methods) function input($index = null, $defaultValue = null, ...$methods)
{ {
if ($index !== null) { if ($index !== null) {
return request()->getInputHandler()->getValue($index, $defaultValue, ...$methods); return request()->getInputHandler()->value($index, $defaultValue, ...$methods);
} }
return request()->getInputHandler(); return request()->getInputHandler();
+94 -65
View File
@@ -10,17 +10,17 @@ class InputHandler
/** /**
* @var array * @var array
*/ */
public $get = []; protected $get = [];
/** /**
* @var array * @var array
*/ */
public $post = []; protected $post = [];
/** /**
* @var array * @var array
*/ */
public $file = []; protected $file = [];
/** /**
* @var Request * @var Request
@@ -46,7 +46,7 @@ class InputHandler
{ {
/* Parse get requests */ /* Parse get requests */
if (\count($_GET) !== 0) { if (\count($_GET) !== 0) {
$this->get = $this->handleGetPost($_GET); $this->get = $this->parseInputItem($_GET);
} }
/* Parse post requests */ /* Parse post requests */
@@ -57,7 +57,7 @@ class InputHandler
} }
if (\count($postVars) !== 0) { if (\count($postVars) !== 0) {
$this->post = $this->handleGetPost($postVars); $this->post = $this->parseInputItem($postVars);
} }
/* Parse get requests */ /* Parse get requests */
@@ -87,7 +87,7 @@ class InputHandler
} }
$keys = [$key]; $keys = [$key];
$files = $this->rearrangeFiles($value['name'], $keys, $value); $files = $this->rearrangeFile($value['name'], $keys, $value);
if (isset($list[$key]) === true) { if (isset($list[$key]) === true) {
$list[$key][] = $files; $list[$key][] = $files;
@@ -100,9 +100,16 @@ class InputHandler
return $list; return $list;
} }
protected function rearrangeFiles(array $values, &$index, $original): array /**
* Rearrange multi-dimensional file object created by PHP.
*
* @param array $values
* @param array $index
* @param array|null $original
* @return array
*/
protected function rearrangeFile(array $values, &$index, $original): array
{ {
$originalIndex = $index[0]; $originalIndex = $index[0];
array_shift($index); array_shift($index);
@@ -138,7 +145,7 @@ class InputHandler
$index[] = $key; $index[] = $key;
$files = $this->rearrangeFiles($value, $index, $original); $files = $this->rearrangeFile($value, $index, $original);
if (isset($output[$key]) === true) { if (isset($output[$key]) === true) {
$output[$key][] = $files; $output[$key][] = $files;
@@ -151,7 +158,13 @@ class InputHandler
return $output; return $output;
} }
protected function handleGetPost(array $array): array /**
* Parse input item from array
*
* @param array $array
* @return array
*/
protected function parseInputItem(array $array): array
{ {
$list = []; $list = [];
@@ -163,7 +176,7 @@ class InputHandler
continue; continue;
} }
$output = $this->handleGetPost($value); $output = $this->parseInputItem($value);
$list[$key] = $output; $list[$key] = $output;
} }
@@ -172,62 +185,26 @@ class InputHandler
} }
/** /**
* Find post-value by index or return default value. * Find input object
*
* @param string $index
* @param string|null $defaultValue
* @return InputItem|string
*/
public function findPost(string $index, ?string $defaultValue = null)
{
return $this->post[$index] ?? $defaultValue;
}
/**
* Find file by index or return default value.
*
* @param string $index
* @param string|null $defaultValue
* @return InputFile|string
*/
public function findFile(string $index, ?string $defaultValue = null)
{
return $this->file[$index] ?? $defaultValue;
}
/**
* Find parameter/query-string by index or return default value.
*
* @param string $index
* @param string|null $defaultValue
* @return InputItem|string
*/
public function findGet(string $index, ?string $defaultValue = null)
{
return $this->get[$index] ?? $defaultValue;
}
/**
* Get input object
* *
* @param string $index * @param string $index
* @param array ...$methods * @param array ...$methods
* @return IInputItem|null * @return IInputItem|array|null
*/ */
public function get(string $index, ...$methods): ?IInputItem public function find(string $index, ...$methods)
{ {
$element = null; $element = null;
if (\count($methods) === 0 || \in_array('get', $methods, true) === true) { if (\count($methods) === 0 || \in_array('get', $methods, true) === true) {
$element = $this->findGet($index); $element = $this->get($index);
} }
if (($element === null && \count($methods) === 0) || (\count($methods) !== 0 && \in_array('post', $methods, true) === true)) { if (($element === null && \count($methods) === 0) || (\count($methods) !== 0 && \in_array('post', $methods, true) === true)) {
$element = $this->findPost($index); $element = $this->post($index);
} }
if (($element === null && \count($methods) === 0) || (\count($methods) !== 0 && \in_array('file', $methods, true) === true)) { if (($element === null && \count($methods) === 0) || (\count($methods) !== 0 && \in_array('file', $methods, true) === true)) {
$element = $this->findFile($index); $element = $this->file($index);
} }
return $element; return $element;
@@ -239,11 +216,24 @@ class InputHandler
* @param string $index * @param string $index
* @param string|null $defaultValue * @param string|null $defaultValue
* @param array ...$methods * @param array ...$methods
* @return string * @return string|array
*/ */
public function getValue(string $index, ?string $defaultValue = null, ...$methods): ?string public function value(string $index, ?string $defaultValue = null, ...$methods)
{ {
$input = $this->get($index, ...$methods); $input = $this->find($index, ...$methods);
$output = [];
/* Handle collection */
if (\is_array($input) === true) {
/* @var $item InputItem */
foreach ($input as $item) {
$output[] = $item->getValue();
}
return (\count($output) === 0) ? $defaultValue : $output;
}
return ($input === null || ($input !== null && trim($input->getValue()) === '')) ? $defaultValue : $input->getValue(); return ($input === null || ($input !== null && trim($input->getValue()) === '')) ? $defaultValue : $input->getValue();
} }
@@ -256,15 +246,51 @@ class InputHandler
*/ */
public function exists(string $index, ...$methods): bool public function exists(string $index, ...$methods): bool
{ {
return $this->get($index, ...$methods) !== null; return $this->value($index, null, ...$methods) !== null;
}
/**
* Find post-value by index or return default value.
*
* @param string $index
* @param string|null $defaultValue
* @return InputItem|array|string|null
*/
public function post(string $index, ?string $defaultValue = null)
{
return $this->post[$index] ?? $defaultValue;
}
/**
* Find file by index or return default value.
*
* @param string $index
* @param string|null $defaultValue
* @return InputFile|array|string|null
*/
public function file(string $index, ?string $defaultValue = null)
{
return $this->file[$index] ?? $defaultValue;
}
/**
* Find parameter/query-string by index or return default value.
*
* @param string $index
* @param string|null $defaultValue
* @return InputItem|array|string|null
*/
public function get(string $index, ?string $defaultValue = null)
{
return $this->get[$index] ?? $defaultValue;
} }
/** /**
* Get all get/post items * Get all get/post items
* @param array|null $filter Only take items in filter * @param array $filter Only take items in filter
* @return array * @return array
*/ */
public function all(array $filter = null): array public function all(array $filter): array
{ {
$output = $_GET; $output = $_GET;
@@ -273,13 +299,16 @@ class InputHandler
// Append POST data // Append POST data
$output += $_POST; $output += $_POST;
$contents = file_get_contents('php://input'); if (\in_array($this->request->getMethod(), ['put', 'patch', 'delete'], false) === true) {
// Append any PHP-input json $contents = file_get_contents('php://input');
if (strpos(trim($contents), '{') === 0) {
$post = json_decode($contents, true); // Append any PHP-input json
if ($post !== false) { if (strpos(trim($contents), '{') === 0) {
$output += $post; $post = json_decode($contents, true);
if ($post !== false) {
$output += $post;
}
} }
} }
} }
@@ -67,7 +67,7 @@ class BaseCsrfVerifier implements IMiddleware
if ($this->skip($request) === false && \in_array($request->getMethod(), ['post', 'put', 'delete'], true) === true) { if ($this->skip($request) === false && \in_array($request->getMethod(), ['post', 'put', 'delete'], true) === true) {
$token = $request->getInputHandler()->getValue( $token = $request->getInputHandler()->value(
static::POST_KEY, static::POST_KEY,
$request->getHeader(static::HEADER_KEY), $request->getHeader(static::HEADER_KEY),
'post' 'post'
+2 -2
View File
@@ -86,7 +86,7 @@ class Request
$this->setUrl(new Url($this->getHeader('unencoded-url', $this->getHeader('request-uri')))); $this->setUrl(new Url($this->getHeader('unencoded-url', $this->getHeader('request-uri'))));
$this->inputHandler = new InputHandler($this); $this->inputHandler = new InputHandler($this);
$this->method = strtolower($this->inputHandler->getValue('_method', $this->getHeader('request-method'))); $this->method = strtolower($this->inputHandler->value('_method', $this->getHeader('request-method')));
} }
public function isSecure(): bool public function isSecure(): bool
@@ -279,7 +279,7 @@ class Request
*/ */
public function setMethod(string $method): void public function setMethod(string $method): void
{ {
$this->method = $method; $this->method = strtolower($method);
} }
/** /**
+19 -4
View File
@@ -14,7 +14,7 @@ class Url implements \JsonSerializable
private $username; private $username;
private $password; private $password;
private $path; private $path;
private $params; private $params = [];
private $fragment; private $fragment;
/** /**
@@ -43,9 +43,7 @@ class Url implements \JsonSerializable
$this->fragment = $data['fragment'] ?? null; $this->fragment = $data['fragment'] ?? null;
if (isset($data['query']) === true) { if (isset($data['query']) === true) {
$params = []; $this->setQueryString($data['query']);
parse_str($data['query'], $params);
$this->setParams($params);
} }
} }
} }
@@ -240,6 +238,23 @@ class Url implements \JsonSerializable
return $this; return $this;
} }
/**
* Set raw query-string parameters as string
*
* @param string $queryString
* @return static
*/
public function setQueryString(string $queryString): self
{
$params = [];
if(parse_str($queryString, $params) !== false) {
return $this->setParams($params);
}
return $this;
}
/** /**
* Get query-string params as string * Get query-string params as string
* *
+5 -11
View File
@@ -120,9 +120,6 @@ abstract class LoadableRoute extends Route implements ILoadableRoute
$url = '//' . $group->getDomains()[0] . $url; $url = '//' . $group->getDomains()[0] . $url;
} }
/* Contains parameters that aren't recognized and will be appended at the end of the url */
$unknownParams = [];
/* Create the param string - {parameter} */ /* Create the param string - {parameter} */
$param1 = $this->paramModifiers[0] . '%s' . $this->paramModifiers[1]; $param1 = $this->paramModifiers[0] . '%s' . $this->paramModifiers[1];
@@ -142,7 +139,7 @@ abstract class LoadableRoute extends Route implements ILoadableRoute
$value = array_key_exists($param, $p) ? $p[$param] : $params[$param]; $value = array_key_exists($param, $p) ? $p[$param] : $params[$param];
/* If parameter is specifically set to null - use the original-defined value */ /* If parameter is specifically set to null - use the original-defined value */
if ($value === null && isset($this->originalParameters[$param])) { if ($value === null && isset($this->originalParameters[$param]) === true) {
$value = $this->originalParameters[$param]; $value = $this->originalParameters[$param];
} }
} }
@@ -151,13 +148,12 @@ abstract class LoadableRoute extends Route implements ILoadableRoute
/* Add parameter to the correct position */ /* Add parameter to the correct position */
$url = str_ireplace([sprintf($param1, $param), sprintf($param2, $param)], $value, $url); $url = str_ireplace([sprintf($param1, $param), sprintf($param2, $param)], $value, $url);
} else { } else {
$unknownParams[$param] = $value; /* Parameter aren't recognized and will be appended at the end of the url */
$url .= $value . '/';
} }
} }
$url = '/' . ltrim($url, '/') . implode('/', $unknownParams); return rtrim('/' . ltrim($url, '/'), '/') . '/';
return rtrim($url, '/') . '/';
} }
/** /**
@@ -254,9 +250,7 @@ abstract class LoadableRoute extends Route implements ILoadableRoute
$this->prependUrl($values['prefix']); $this->prependUrl($values['prefix']);
} }
parent::setSettings($values, $merge); return parent::setSettings($values, $merge);
return $this;
} }
} }
+12 -11
View File
@@ -76,7 +76,9 @@ abstract class Route implements IRoute
} }
$router->debug('Parsing parameters'); $router->debug('Parsing parameters');
$parameters = $this->getParameters(); $parameters = $this->getParameters();
$router->debug('Finished parsing parameters'); $router->debug('Finished parsing parameters');
/* Filter parameters with null-value */ /* Filter parameters with null-value */
@@ -118,14 +120,17 @@ abstract class Route implements IRoute
protected function parseParameters($route, $url, $parameterRegex = null) protected function parseParameters($route, $url, $parameterRegex = null)
{ {
$regex = sprintf(static::PARAMETERS_REGEX_FORMAT, $this->paramModifiers[0], $this->paramOptionalSymbol, $this->paramModifiers[1]); $regex = null;
if (strpos($route, $this->paramModifiers[0]) !== false) {
$parameters = []; $regex = sprintf(static::PARAMETERS_REGEX_FORMAT, $this->paramModifiers[0], $this->paramOptionalSymbol, $this->paramModifiers[1]);
}
// Ensures that host names/domains will work with parameters // Ensures that host names/domains will work with parameters
$url = '/' . ltrim($url, '/'); $url = '/' . ltrim($url, '/');
$urlRegex = null;
$parameters = [];
if ((bool)preg_match_all('/' . $regex . '/u', $route, $parameters) === false) { if ($regex === null || (bool)preg_match_all('/' . $regex . '/u', $route, $parameters) === false) {
$urlRegex = preg_quote($route, '/'); $urlRegex = preg_quote($route, '/');
} else { } else {
@@ -155,14 +160,11 @@ abstract class Route implements IRoute
$regex = sprintf('(?:\/|\-)%1$s(?P<%2$s>%3$s)%1$s', $parameters[2][$key], $name, $regex); $regex = sprintf('(?:\/|\-)%1$s(?P<%2$s>%3$s)%1$s', $parameters[2][$key], $name, $regex);
} }
$urlParts[$key] = preg_quote($t, '/') . $regex; $urlRegex .= preg_quote($t, '/') . $regex;
} }
$urlRegex = implode('', $urlParts);
} }
if ((bool)preg_match(sprintf($this->urlRegex, $urlRegex), $url, $matches) === false) { if ($urlRegex === null || (bool)preg_match(sprintf($this->urlRegex, $urlRegex), $url, $matches) === false) {
return null; return null;
} }
@@ -247,9 +249,8 @@ abstract class Route implements IRoute
$this->group = $group; $this->group = $group;
/* Add/merge parent settings with child */ /* Add/merge parent settings with child */
$this->setSettings($group->toArray(), true);
return $this; return $this->setSettings($group->toArray(), true);
} }
/** /**
@@ -95,7 +95,7 @@ class RouteController extends LoadableRoute implements IControllerRoute
/* Match global regular-expression for route */ /* Match global regular-expression for route */
$regexMatch = $this->matchRegex($request, $url); $regexMatch = $this->matchRegex($request, $url);
if ($regexMatch === false || (stripos($url, $this->url) !== 0 && strtolower($url) !== strtolower($this->url))) { if ($regexMatch === false || (stripos($url, $this->url) !== 0 && strtoupper($url) !== strtoupper($this->url))) {
return false; return false;
} }
@@ -177,9 +177,7 @@ class RouteController extends LoadableRoute implements IControllerRoute
$this->names = $values['names']; $this->names = $values['names'];
} }
parent::setSettings($values, $merge); return parent::setSettings($values, $merge);
return $this;
} }
} }
+1 -3
View File
@@ -173,9 +173,7 @@ class RouteGroup extends Route implements IGroupRoute
$this->name = $name; $this->name = $name;
} }
parent::setSettings($values, $merge); return parent::setSettings($values, $merge);
return $this;
} }
/** /**
@@ -92,7 +92,7 @@ class RouteResource extends LoadableRoute implements IControllerRoute
/* Match global regular-expression for route */ /* Match global regular-expression for route */
$regexMatch = $this->matchRegex($request, $url); $regexMatch = $this->matchRegex($request, $url);
if ($regexMatch === false || (stripos($url, $this->url) !== 0 && strtolower($url) !== strtolower($this->url))) { if ($regexMatch === false || (stripos($url, $this->url) !== 0 && strtoupper($url) !== strtoupper($this->url))) {
return false; return false;
} }
@@ -224,9 +224,7 @@ class RouteResource extends LoadableRoute implements IControllerRoute
$this->methodNames = $values['methods']; $this->methodNames = $values['methods'];
} }
parent::setSettings($values, $merge); return parent::setSettings($values, $merge);
return $this;
} }
} }
+4 -14
View File
@@ -506,7 +506,6 @@ class Router
} }
try { try {
$this->debug('Start rendering exception handler'); $this->debug('Start rendering exception handler');
$handler->handleError($this->request, $e); $handler->handleError($this->request, $e);
$this->debug('Finished rendering exception-handler'); $this->debug('Finished rendering exception-handler');
@@ -565,7 +564,7 @@ class Router
} }
/* Direct match to controller */ /* Direct match to controller */
if ($route instanceof IControllerRoute && strtolower($route->getController()) === strtolower($name)) { if ($route instanceof IControllerRoute && strtoupper($route->getController()) === strtoupper($name)) {
$this->debug('Found route "%s" by controller "%s"', $route->getUrl(), $name); $this->debug('Found route "%s" by controller "%s"', $route->getUrl(), $name);
return $route; return $route;
@@ -805,26 +804,20 @@ class Router
* Set csrf verifier class * Set csrf verifier class
* *
* @param BaseCsrfVerifier $csrfVerifier * @param BaseCsrfVerifier $csrfVerifier
* @return static
*/ */
public function setCsrfVerifier(BaseCsrfVerifier $csrfVerifier): self public function setCsrfVerifier(BaseCsrfVerifier $csrfVerifier): void
{ {
$this->csrfVerifier = $csrfVerifier; $this->csrfVerifier = $csrfVerifier;
return $this;
} }
/** /**
* Set class loader * Set class loader
* *
* @param IClassLoader $loader * @param IClassLoader $loader
* @return static
*/ */
public function setClassLoader(IClassLoader $loader) public function setClassLoader(IClassLoader $loader): void
{ {
$this->classLoader = $loader; $this->classLoader = $loader;
return $this;
} }
/** /**
@@ -841,13 +834,10 @@ class Router
* Register event handler * Register event handler
* *
* @param IEventHandler $handler * @param IEventHandler $handler
* @return static
*/ */
public function addEventHandler(IEventHandler $handler): self public function addEventHandler(IEventHandler $handler): void
{ {
$this->eventHandlers[] = $handler; $this->eventHandlers[] = $handler;
return $this;
} }
/** /**
+25 -17
View File
@@ -24,6 +24,7 @@ use Pecee\SimpleRouter\Handlers\IEventHandler;
use Pecee\SimpleRouter\Route\IGroupRoute; use Pecee\SimpleRouter\Route\IGroupRoute;
use Pecee\SimpleRouter\Route\IPartialGroupRoute; use Pecee\SimpleRouter\Route\IPartialGroupRoute;
use Pecee\SimpleRouter\Route\IRoute; use Pecee\SimpleRouter\Route\IRoute;
use Pecee\SimpleRouter\Route\Route;
use Pecee\SimpleRouter\Route\RouteController; use Pecee\SimpleRouter\Route\RouteController;
use Pecee\SimpleRouter\Route\RouteGroup; use Pecee\SimpleRouter\Route\RouteGroup;
use Pecee\SimpleRouter\Route\RoutePartialGroup; use Pecee\SimpleRouter\Route\RoutePartialGroup;
@@ -160,6 +161,21 @@ class SimpleRouter
static::router()->addBootManager($bootManager); static::router()->addBootManager($bootManager);
} }
/**
* Redirect to when route matches.
*
* @param string $where
* @param string $to
* @param int $httpCode
* @return IRoute
*/
public static function redirect($where, $to, $httpCode = 301): IRoute
{
return static::get($where, function () use ($to, $httpCode) {
static::response()->redirect($to, $httpCode);
});
}
/** /**
* Route the given url to your callback on GET request method. * Route the given url to your callback on GET request method.
* *
@@ -171,7 +187,7 @@ class SimpleRouter
*/ */
public static function get(string $url, $callback, array $settings = null): IRoute public static function get(string $url, $callback, array $settings = null): IRoute
{ {
return static::match(['get'], $url, $callback, $settings); return static::match([Route::REQUEST_TYPE_GET], $url, $callback, $settings);
} }
/** /**
@@ -184,7 +200,7 @@ class SimpleRouter
*/ */
public static function post(string $url, $callback, array $settings = null): IRoute public static function post(string $url, $callback, array $settings = null): IRoute
{ {
return static::match(['post'], $url, $callback, $settings); return static::match([Route::REQUEST_TYPE_POST], $url, $callback, $settings);
} }
/** /**
@@ -197,7 +213,7 @@ class SimpleRouter
*/ */
public static function put(string $url, $callback, array $settings = null): IRoute public static function put(string $url, $callback, array $settings = null): IRoute
{ {
return static::match(['put'], $url, $callback, $settings); return static::match([Route::REQUEST_TYPE_PUT], $url, $callback, $settings);
} }
/** /**
@@ -210,7 +226,7 @@ class SimpleRouter
*/ */
public static function patch(string $url, $callback, array $settings = null): IRoute public static function patch(string $url, $callback, array $settings = null): IRoute
{ {
return static::match(['patch'], $url, $callback, $settings); return static::match([Route::REQUEST_TYPE_PATCH], $url, $callback, $settings);
} }
/** /**
@@ -223,7 +239,7 @@ class SimpleRouter
*/ */
public static function options(string $url, $callback, array $settings = null): IRoute public static function options(string $url, $callback, array $settings = null): IRoute
{ {
return static::match(['options'], $url, $callback, $settings); return static::match([Route::REQUEST_TYPE_OPTIONS], $url, $callback, $settings);
} }
/** /**
@@ -337,9 +353,7 @@ class SimpleRouter
$route->setSettings($settings); $route->setSettings($settings);
} }
static::router()->addRoute($route); return static::router()->addRoute($route);
return $route;
} }
/** /**
@@ -359,9 +373,7 @@ class SimpleRouter
$route->setSettings($settings); $route->setSettings($settings);
} }
static::router()->addRoute($route); return static::router()->addRoute($route);
return $route;
} }
/** /**
@@ -381,9 +393,7 @@ class SimpleRouter
$route->setSettings($settings); $route->setSettings($settings);
} }
static::router()->addRoute($route); return static::router()->addRoute($route);
return $route;
} }
/** /**
@@ -403,9 +413,7 @@ class SimpleRouter
$route->setSettings($settings); $route->setSettings($settings);
} }
static::router()->addRoute($route); return static::router()->addRoute($route);
return $route;
} }
/** /**
+96 -6
View File
@@ -7,14 +7,104 @@ require_once 'Dummy/Handler/ExceptionHandler.php';
class InputHandlerTest extends \PHPUnit\Framework\TestCase class InputHandlerTest extends \PHPUnit\Framework\TestCase
{ {
public function testGet()
{
$this->assertEquals(true, true);
}
public function testPost() public function testPost()
{ {
$this->assertEquals(true, true); global $_POST;
$names = [
'Lester',
'Michael',
'Franklin',
'Trevor',
];
$day = 'monday';
$_POST = [
'names' => $names,
'day' => $day,
];
$router = TestRouter::router();
$router->reset();
$router->getRequest()->setMethod('post');
$handler = TestRouter::request()->getInputHandler();
$this->assertEquals($names, $handler->value('names'));
$this->assertEquals($names, $handler->all(['names'])['names']);
$this->assertEquals($day, $handler->value('day'));
$this->assertInstanceOf(\Pecee\Http\Input\InputItem::class, $handler->find('day'));
$this->assertInstanceOf(\Pecee\Http\Input\InputItem::class, $handler->post('day'));
// Check non-existing and wrong request-type
$this->assertEmpty($handler->all(['non-existing']));
$this->assertNull($handler->value('non-existing'));
$this->assertNull($handler->find('non-existing'));
$this->assertNull($handler->value('names', null, 'get'));
$this->assertNull($handler->find('names', 'get'));
$objects = $handler->find('names');
$this->assertCount(4, $objects);
/* @var $object \Pecee\Http\Input\InputItem */
foreach($objects as $i => $object) {
$this->assertInstanceOf(\Pecee\Http\Input\InputItem::class, $object);
$this->assertEquals($names[$i], $object->getValue());
}
$_POST = [];
}
public function testGet()
{
global $_GET;
$names = [
'Lester',
'Michael',
'Franklin',
'Trevor',
];
$day = 'monday';
$_GET = [
'names' => $names,
'day' => $day,
];
$router = TestRouter::router();
$router->reset();
$router->getRequest()->setMethod('get');
$handler = TestRouter::request()->getInputHandler();
$this->assertEquals($names, $handler->value('names'));
$this->assertEquals($names, $handler->all(['names'])['names']);
$this->assertEquals($day, $handler->value('day'));
$this->assertInstanceOf(\Pecee\Http\Input\InputItem::class, $handler->find('day'));
$this->assertInstanceOf(\Pecee\Http\Input\InputItem::class, $handler->get('day'));
// Check non-existing and wrong request-type
$this->assertEmpty($handler->all(['non-existing']));
$this->assertNull($handler->value('non-existing'));
$this->assertNull($handler->find('non-existing'));
$this->assertNull($handler->value('names', null, 'post'));
$this->assertNull($handler->find('names', 'post'));
$objects = $handler->find('names');
$this->assertCount(4, $objects);
/* @var $object \Pecee\Http\Input\InputItem */
foreach($objects as $i => $object) {
$this->assertInstanceOf(\Pecee\Http\Input\InputItem::class, $object);
$this->assertEquals($names[$i], $object->getValue());
}
$_GET = [];
} }
public function testFile() public function testFile()