Jump to content

Uri Routing Help


ShoeLace1291

Recommended Posts

So, I am trying to write a script that routes URI's to the appropriate file. I am not using classes, only files(source) and functions(action). I've had a bunch of trouble with getting this to work, and I can't seem to figure out the problem. Basically, I want to route the first segment to a source file if it is a valid source. If a second segment exists and is a valid action(function), then that function will be loaded. So say I have a source file called members.source.php and there is a function called register in it. A user will have to access the uri http://localhost/mya...embers/register to access that page. or myapp/members would be directed to the "_default" action(function). myapp/members/SomeCoolMember would redirect to members.source.php with the viewprofile action(function).

 

I hope you understand what I am trying to get at here. For whatever reason, the variable "source" is not being defined. Here's what I have as my index.php file.

 

$uri_segments = $_SERVER['REQUEST_URI'];

$uri_segments = str_replace('/Base%20Command/', '', $uri_segments);

if(strlen($uri_segments) == 0){

$uri_segments = array();

} else {

$uri_segments = explode('/', $uri_segments);

}

if(count($uri_segments) > 0){

foreach($uri_segments as $key => $segment){

if(!preg_match('^[a-z0-9_-]^', $segment)){

die('Could not accept provied URI string... the string contains invalid characters.<br>'.$segment);

} else {

if(validSource($segment) && empty($source)){

$source = $segment;

} else if(validDirectory($segment) && empty($source)){

$source = $segment;

} else if(isset($source) && empty($action)){

if(validFunction($segment)){

$action = $segment;

} else {

die('404 Error: Page not found. 001');

}

}

}

}

} else {

$source = 'index';
$action = '_default';

}

function validSource($sourceName){

   if(file_exists(DOC_ROOT.'/sources/'.$sourceName)){

       return TRUE;

   } else {

       return FALSE;

   }

}

function validDirectory($dirName){

   if(is_dir(DOC_ROOT.'/sources/'.$dirName)){

       return TRUE;

   } else {

       return FALSE;

   }

}

function validFunction($fnc){

   if(function_exists($fnc)){

       return TRUE;

   } else {

       return FALSE;

   }

}

Link to comment
https://forums.phpfreaks.com/topic/272435-uri-routing-help/
Share on other sites

Your control flow is up-the-creek. You need to review your if statements because your final else if tests if $source has been set BUT its included in the control flow that sets the $source variable therefore, if $source gets set it will never make it to the final else if, it'll skip over it.

Link to comment
https://forums.phpfreaks.com/topic/272435-uri-routing-help/#findComment-1401797
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.