Hej jeg er ved at lave mit eget mvc framework. men i min url hvis jeg skriver :id skal den ignorere den??
Hej..Jeg er ved at lave et mvc framework, og det virker også helt som
det nu skal, hvis jeg skriver user i url'en finder den controlleren.
også videre user/sign_in
men hvis jeg nu skriver min route sådan her:
$application_routes -> match_connect('/user/sign_in/:id', 'user#sign_in');
så skal :id ignoreres, altså så man kan skriver user/sign_in/12 fx. så er 12 et param mere i url'en.
eller den kan også se sådan her ud:
$application_routes -> match_connect('/user/:id/sign_in', 'user#sign_in');
men jeg ved bare ikke hvordan man kan lave det...
<?php
$application_routes = new ApplicationRoutes;
$application_routes -> match_connect('/user', 'user#index');
$application_routes -> match_connect('/user/sign_in/:id', 'user#sign_in');
?>
Router:
<?php
class ApplicationRoutes {
protected $controller;
protected $action;
function __construct() {
$this->view = new ApplicationView();
}
function match_connect($url, $route) {
if($this->find_matchs($url)) {
// jeg splitter lige route fx user#index til user index.
$explode = explode('#', $route);
// smider controller i denne variabel.
$this->controller = $explode[0];
// smider action for denne controller i denne variabel.
$this->action = $explode[1];
// vi smider lige den ind i en variabel.
$this->controller_path = CONTROLLERS.$this->controller.'_controller.php';
// tjekker lige om controller findes.
if(!file_exists($this->controller_path)) {
echo "<pre>MVC kunne ikke åbne filen: <b>".$this->controller_path."</b></pre>";
} else {
// åbner efterspurgte controller.
require $this->controller_path;
// instance for den efterspurgte controller.
$this->instance = new $this->controller;
// tjekker lige om action findes.
if(method_exists($this->instance, $this->action)) {
// åbner action i denne controller.
$this->instance->{$this->action}();
} else {
echo "<pre>MVC kunne ikke finde action: <b>".$this->action."</b> i denne controller: <b>".$this->controller_file."</b></pre>";
}
}
}
}
function find_matchs($url) {
// tjekker om ruten findes, med den som brugeren skriver i url'en og den som ligger i config.
if(rtrim(strtolower($_GET['url']), '/') == ltrim(strtolower($url), '/')) {
// return true hvis ruten er fundet.
return true;
}
}
}
?>
men sådan som mit system er lavet så tjekker den i url'en som man
skriver og ser om det kan matche i mine routes...
så jeg er tvunget til at skrive /user/sign_in/:id
istedet for /user/sign_in/12
håber i forstår mig...
