<?php class Controller_Routingsetter extends Controller { const NEW_ROUTE = 5; public function action_index() { if (Input::method() == 'POST') { // get routes had been set $total_line = Input::post('total_line'); $route_array = array(); for ($i = 0; $i < $total_line; $i++) { if (!(Input::post('line'.$i, false) === false) and Input::post('pattern'.$i) and Input::post('class_action'.$i) and !Input::post('delete_radio'.$i)) { $route_array[Input::post('line'.$i)] = array('pattern' => Input::post('pattern'.$i), 'class_action' => Input::post('class_action'.$i)); } } // get add new routing items for ($i = 0; $i < self::NEW_ROUTE; $i++) { if (Input::post('new_line'.$i) and Input::post('new_pattern'.$i) and Input::post('new_class_action'.$i)) { $route_array[Input::post('new_line'.$i)] = array('pattern' => Input::post('new_pattern'.$i), 'class_action' => Input::post('new_class_action'.$i)); } } ksort($route_array); // set config routes group Config::delete('routes'); foreach ($route_array as $item) { Config::set('routes.'.$item['pattern'], $item['class_action']); } // save routes group as routes.php Config::save('routes', 'routes'); } // End of POST handing // get config routes group $routes = Config::get('routes', array()); $rt = array(); foreach ($routes as $key => $item) { // transform route pattern to reguler expression $replace = str_replace(array( ':any', ':alnum', ':num', ':alpha', ':segment', ), array( '.+', '[[:alnum:]]+', '[[:digit:]]+', '[[:alpha:]]+', '[^/]*', ), '/'.$key.'/'); $replace = preg_replace('%:([[:alpha:]]+)/%', '(?P<$1>.+?)/', $replace); $rt[] = array( 'exp' => trim($replace, '/'), 'pattern' => trim($key, '/'), 'class_action' => trim($item, '/') ); } // simulate routing $matched = false; $p404 = false; $test_uri = trim(Input::post('test_uri'), '/'); foreach ($rt as $key => $item) { if ($test_uri == '' and $item['exp'] == '_root_') { $matched = $key; break; } elseif (preg_match('{^'.$item['exp'].'$}', $test_uri, $matches)) { $matched = $key; break; } elseif ($item['pattern'] == '_404_') { $p404 = $key; } } if (!$matched) $matched = $p404; // output content without view echo Html::doctype('html5'); echo '<head><meta charset="UTF-8"></head><body>'; echo Form::open(Uri::current()); echo 'Routing test URI?'.Form::input('test_uri', Input::post('test_uri') ? : '', array('size' => 60)).'<hr />'; $last_key = -1; foreach ($rt as $key => $item) { $last_key = $key; echo Form::input('line'.$key, $key * 10, array('size' => 3)).' : '; echo Form::input('pattern'.$key, $item['pattern'], array('size' => 50)).' '; echo Form::input('class_action'.$key, $item['class_action'], array('size' => 50)).' '; echo Form::label('Delete', 'delete_radio'.$key); echo Form::radio('delete_radio'.$key, 'delete_radio'.$key).'<br />'; if ($key == $matched) { echo '<div>'; $match = true; } else { echo '<div>'; } // escapte reguler expressions echo 'Compire expression : '.Security::htmlentities($item['exp']).'<br />'; if ($key === $p404) { echo 'Matched as _404_'; } elseif ($key == $matched) { if ($key == '_root_') { echo 'Matched _root_'; } else { ksort($matches, SORT_LOCALE_STRING); foreach ($matches as $k => $m) { if (is_numeric($k)) { echo '$'.$k.' => '.'"'.$m.'"<br />'; } else { echo '$this->param("'.$k.'") => "'.$m.'"<br />'; } } } } echo '</div><hr />'; } // keep count items echo Form::hidden('total_line', $last_key + 1); // add new routes echo '<p>Add New route</p>'; for ($i = 0; $i < self::NEW_ROUTE; $i++) { echo Form::input('new_line'.$i, ($last_key + $i + 1) * 10, array('size' => 3)).' : '; echo Form::input('new_pattern'.$i, '', array('size' => 50)).' '; echo Form::input('new_class_action'.$i, '', array('size' => 50)).'<br />'; } echo '<hr />'; echo Form::submit('submit', 'Submit'); echo Form::close(); echo '</body>'; } }
It looks like you're new here. If you want to get involved, click one of these buttons!