URI Routing - custom routing

Cum as putea determina intr-o functie de rutare cand URL este de tipul site.ro/controller/parametru? Momentan pot redirectiona site.ro/controller/metoda/parametru atat cu controllerul si metoda in URL cat si dinamic cu verificare intr-un array.

Am ceva de genul.

public function __construct($routes){

		$this->_routes = $routes;
		
		$this->_url = $this->parseUrl();
		
		$this->instatianteController();
	}

	public function instatianteController(){

		
		$this->checkRoutes();
		
		if(!$this->checkRoutes()){


			if(file_exists('../controllers/' . $this->_url[0] . '.php')){

				$this->_controller = $this->_url[0];
			}

		}


		//return object
		
		require_once '../app/controllers/' . $this->_controller . '.php';
		$this->_controller = new $this->_controller;

		if(isset($this->_url[1])){

			if (method_exists($this->_controller, $this->_url[1])) {
				$this->_method = $this->_url[1];
			}
		}

		
		unset($this->_url[0], $this->_url[1]);

		$this->_params = $this->_url ? array_values($this->_url) : [];

		call_user_func_array([$this->_controller, $this->_method], $this->_params);
	}

	

	public function checkRoutes(){


		/*	$routes = array(

			'test' => array(

					'controller' => 'contact'

				),
			'about-us' => array(

					'controller' => 'despre',

				)

		);
	
*/		

		foreach($this->_routes as $route => $components){
				//ECHO __DIR__ . '../App.php';
			
			if($route === $this->_url[0] && file_exists('../app/controllers/' . $components['controller'] . '.php')){

				
				$this->_controller = $components['controller'];

				if(isset($components['method'])){
					
					$this->_method =  $components['method'];
				}

				return true;
			}

			
		}


	}

Multumesc.

Poti incerca o alta varianta, avand controller-ul si metoda in URL nu este o solutie fiabila.Nu este mai usor sa atribui unui segment URI un anumit controller si o metoda din acel controller? Cu alte cuvinte, nu este mai usor sa ai ceva de genul "/home" => "HomeController@index" ? Dupa cum poti observa, daca din URL extragi URI-ul ca fiind "/home", atunci vei crea obiectul HomeController si vei apela metoda index a acestui obiect.Mai mult decat atat, nu uita, fiecare ruta trebuie sa raspunda la cereri HTTP in functie de metoda (GET, POST, PUT etc) folosita.

Nu prea inteleg ce vrei sa spui. In checkRoutes() verific intr-un array daca exista un corespondent pentru calea din URL.

Cererile HTTP in episodul urmator, sa ma documentez inainte.

nu prea poti. n-ai cum sa-ti dai seama daca al 2-lea segment e metoda sau parametru. poti sa incerci cu rute statice (controller/{parametru}=> MyController@someMethod(parametru))

1 Like