steampixel / simplePHPRouter

This is a simple and small single class PHP router that can handel the whole url routing for your project.
MIT License
406 stars 117 forks source link

Need help #21

Closed steampixel closed 4 years ago

steampixel commented 4 years ago

https://github.com/florescuadrian86 wrote:

Hello. I contact you from github, I try install this https://github.com/steampixel/simplePHPRouter/tree/master on local host, on xampp.

If this is my path C:\xampp\htdocs\simplePHPRouter How put here? // Run the router Route::run('/');

steampixel commented 4 years ago

Can you please give me some more details about your setup?

florescuadrian86 commented 4 years ago

Link: http://localhost/simplePHPRouter Code from index.php " `<?php

// Use this namespace use Steampixel\Route;

// Include router class include 'src/Steampixel/Route.php';

// var_dump($_GET); // exit();

function navi() { echo <<<EOD Navigation:

EOD; }

// Add base route (startpage) Route::add('/', function() { navi(); echo 'Welcome :-)'; });

// Another base route example Route::add('/index.php', function() { navi(); echo 'You are not really on index.php ;-)'; });

// Simple test route that simulates static html file // TODO: Fix this for some web servers Route::add('/test.html', function() { navi(); echo 'Hello from test.html'; });

// This route is for debugging only // It simply prints out some php infos // Do not use this route on production systems! Route::add('/phpinfo', function() { navi(); phpinfo(); });

// Post route example Route::add('/contact-form', function() { navi(); echo '

'; }, 'get');

// Post route example Route::add('/contact-form', function() { navi(); echo 'Hey! The form has been sent:
'; print_r($_POST); }, 'post');

// Get and Post route example Route::add('/get-post-sample', function() { navi(); echo 'You can GET this page and also POST this form back to it'; echo '

'; if (isset($_POST['input'])) { echo 'I also received a POST with this data:
'; print_r($_POST); } }, ['get','post']);

// Route with regexp parameter // Be aware that (.) will match / (slash) too. For example: /user/foo/bar/edit // Also users could inject SQL statements or other untrusted data if you use (.) // You should better use a saver expression like /user/([0-9])/edit or /user/([A-Za-z])/edit Route::add('/user/(.*)/edit', function($id) { navi(); echo 'Edit user with id '.$id.'
'; });

// Accept only numbers as parameter. Other characters will result in a 404 error Route::add('/foo/([0-9]*)/bar', function($var1) { navi(); echo $var1.' is a great number!'; });

// Crazy route with parameters Route::add('/(.)/(.)/(.)/(.)', function($var1,$var2,$var3,$var4) { navi(); echo 'This is the first match: '.$var1.' / '.$var2.' / '.$var3.' / '.$var4.'
'; });

// Long route example // By default this route gets never triggered because the route before matches too Route::add('/foo/bar/foo/bar', function() { echo 'This is the second match (This route should only work in multi match mode)
'; });

// Trailing slash example Route::add('/aTrailingSlashDoesNotMatter', function() { navi(); echo 'a trailing slash does not matter
'; });

// Case example Route::add('/theCaseDoesNotMatter',function() { navi(); echo 'the case does not matter
'; });

// 405 test Route::add('/this-route-is-defined', function() { navi(); echo 'You need to patch this route to see this content'; }, 'patch');

// Add a 404 not found route Route::pathNotFound(function($path) { // Do not forget to send a status header back to the client // The router will not send any headers by default // So you will have the full flexibility to handle this case header('HTTP/1.0 404 Not Found'); navi(); echo 'Error 404 :-(
'; echo 'The requested path "'.$path.'" was not found!'; });

// Add a 405 method not allowed route Route::methodNotAllowed(function($path, $method) { // Do not forget to send a status header back to the client // The router will not send any headers by default // So you will have the full flexibility to handle this case header('HTTP/1.0 405 Method Not Allowed'); navi(); echo 'Error 405 :-(
'; echo 'The requested path "'.$path.'" exists. But the request method "'.$method.'" is not allowed on this path!'; });

// Run the Router with the given Basepath // If your script lives in the web root folder use a / or leave it empty Route::run('/');

// If your script lives in a subfolder you can use the following example // Do not forget to edit the basepath in .htaccess if you are on apache // Route::run('/api/v1');

// Enable case sensitive mode, trailing slashes and multi match mode by setting the params to true // Route::run('/', true, true, true);`

"

On click >> http://localhost/simplePHPRouter Show this :

Error 404 :-( The requested path "/simplePHPRouter" was not found!

ghost commented 4 years ago

try changing your path to /simplePHPRouter/ since your executing the script there.

Route::run('/simplePHPRouter/'); or Route::run('./');

florescuadrian86 commented 4 years ago

Idem. "Error 404 :-( The requested path "/simplePHPRouter" was not found!"

steampixel commented 4 years ago

Hi,

I think you have done something strange :-) (I hope so ;-) )

  1. Make sure you have a real folder called "C:\xampp\htdocs\simplePHPRouter" on your HDD
  2. Extract all the contents of the repo to that folder. That means you have files like "C:\xampp\htdocs\simplePHPRouter\index.php", "C:\xampp\htdocs\simplePHPRouter.htaccess", "C:\xampp\htdocs\simplePHPRouter\src\Steampixel\Route.php", etc...
  3. Make sure the index.php file is reachable by calling http://localhost/simplePHPRouter
  4. Double check this by calling http://localhost/simplePHPRouter/README.md This should deliver the readme file directly to you and not an error.
  5. Make sure using "Route::run('/simplePHPRouter');" in your C:\xampp\htdocs\simplePHPRouter\index.php file
  6. Make sure using "RewriteBase /simplePHPRouter/" in C:\xampp\htdocs\simplePHPRouter.htaccess instead of "RewriteBase /"

Can you confirm this? If you can confirm this there must be another strange kind of an error.

florescuadrian86 commented 4 years ago

Hi, Now, worked on click on http://localhost/simplePHPRouter/

But when I click on http://localhost/simplePHPRouter/test.html redirect me to http://localhost/test.html .

In index.php from directory simplePHPRouter, I put :

Route::add('/test.html', function() { navi(); echo 'Hello from test.html'; });

steampixel commented 4 years ago

Hey,

the router does no automatic redirection. I think you missed to alter the menu. In the index.php file there is a function to print a simple demo menu called navi(). But this menu only works if the router runs directly on the domain without subfolder. Read this section: https://github.com/steampixel/simplePHPRouter#use-a-different-basepath. Take a look at the HTML links inside the menu. They will point hard to /test.html and other locations relative to the domain. There is no automatic link generator that will replace the demo links with /simplePHPRouter/test.html . They will still point to the defined locations.

If you want you can define your basepath as a variable on top of your index.php. You can than use this variable inside the Route::run call and you can use this variable to automatic prepend your links with your basepath.

I will create a new issue to pick up this idea for the demo index.php