skipperbent / simple-php-router

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.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Breaking in php 8.1

AlexanderSchaller opened this issue · comments

Using this in php 8.1 throws an error when attempting to use the Router::router->getUrl() function.

string 'strtolower(): Passing null to parameter #1 ($string) of type string is deprecated'

If you need any additional information let me know.

Hello,
could you provide me with the lines of code where you are using this function and the full error including the Trace (File names and lines)?

~ Marius

Sorry for the delay, I am using the helper url function unmodified. Here is the stack trace

handleError(8192, 'strtolower(): P...', '/Users/schaller...', 198)
#1 /Users/schaller/Sites/thefinaloutpost/vendor/pecee/simple-router/src/Pecee/SimpleRouter/Route/LoadableRoute.php(198): strtolower(NULL)
#2 /Users/schaller/Sites/thefinaloutpost/vendor/pecee/simple-router/src/Pecee/SimpleRouter/Router.php(585): Pecee\SimpleRouter\Route\LoadableRoute->hasName('login')
#3 /Users/schaller/Sites/thefinaloutpost/core/vendorPatches/Router.php(39): Pecee\SimpleRouter\Router->findRoute('login')
#4 /Users/schaller/Sites/thefinaloutpost/vendor/pecee/simple-router/src/Pecee/SimpleRouter/SimpleRouter.php(448): app\core\vendorPatches\Router->getUrl('login', NULL, NULL)
#5 /Users/schaller/Sites/thefinaloutpost/core/View.php(140): Pecee\SimpleRouter\SimpleRouter::getUrl('login', NULL)
#6 /Users/schaller/Sites/thefinaloutpost/views/index/logged_out.php(29): app\core\View->escapeUrl('login')
#7 /Users/schaller/Sites/thefinaloutpost/core/View.php(185): include('/Users/schaller...')
#8 /Users/schaller/Sites/thefinaloutpost/core/Controller.php(36): app\core\View->renderView('index/logged_ou...', Array)
#9 /Users/schaller/Sites/thefinaloutpost/controllers/IndexController.php(44): app\core\Controller->render('index/logged_ou...', Array)
#10 [internal function]: app\controllers\IndexController->index()
#11 /Users/schaller/Sites/thefinaloutpost/vendor/pecee/simple-router/src/Pecee/SimpleRouter/ClassLoader/ClassLoader.php(34): call_user_func_array(Array, Array)
#12 /Users/schaller/Sites/thefinaloutpost/vendor/pecee/simple-router/src/Pecee/SimpleRouter/Route/Route.php(111): Pecee\SimpleRouter\ClassLoader\ClassLoader->loadClassMethod(Object(app\controllers\IndexController), 'index', Array)
#13 /Users/schaller/Sites/thefinaloutpost/vendor/pecee/simple-router/src/Pecee/SimpleRouter/Router.php(414): Pecee\SimpleRouter\Route\Route->renderRoute(Object(Pecee\Http\Request), Object(app\core\vendorPatches\Router))
#14 /Users/schaller/Sites/thefinaloutpost/vendor/pecee/simple-router/src/Pecee/SimpleRouter/Router.php(343): Pecee\SimpleRouter\Router->routeRequest()
#15 /Users/schaller/Sites/thefinaloutpost/vendor/pecee/simple-router/src/Pecee/SimpleRouter/SimpleRouter.php(69): Pecee\SimpleRouter\Router->start()
#16 /Users/schaller/Sites/thefinaloutpost/core/Application.php(39): Pecee\SimpleRouter\SimpleRouter::start()
#17 /Users/schaller/Sites/thefinaloutpost/public/index.php(46): app\core\Application->start()
#18 /Users/schaller/.composer/vendor/laravel/valet/server.php(234): require('/Users/schaller...')
#19 {main}"

Hello @AlexanderSchaller,

thank you for reporting this issue. I didn't test the router with PHP 8.1, because my environment doesn't support it jet.
I created the PR #610 that is hopefully fixing your issue. Let me know if you run into any other issues using PHP 8.1 in the comments of the PR.

Until @skipperbent is merging the PR into master, you can change the two lines I changed in #610 your local router code.
Please let me know if this fix resolves your issue.

~ Marius

Yes that fixes the issue - thanks!