私はPHPでルーティングシステムを構築しようとしています。変更可能なURLに問題があります。配列を使ったルーティングシステム - 変数を使ってパラメータを送信する
private $routes = array(
"blog" => array("Blog", "GetAll"),
"/blog\/*/" => array("Blog", "GetOne"),
);
private $query;
public function __construct()
{
$this->query = filter_var($_SERVER['QUERY_STRING'], FILTER_SANITIZE_URL);
}
public function SendAction()
{
$route = array();
if (array_key_exists($this->query, $this->routes)) {
$route['controller'] = $this->routes[$this->query][0];
$route['action'] = $this->routes[$this->query][1];
$route['params'] = $this->routes[$this->query][2];
} else {
$route['controller'] = "Error";
$route['action'] = "Main";
$route['params'] = array();
}
return $route;
}
問題は、abc/my_custom_variable_or/slug
を含むURLにあります。
私はのように、場合、他との一時解決策を見つけるので、私は私のコントローラで
を使用することができますmy_custom_variable_or
とslug
を取得し、params['fdsaf']
にそれらを配置する必要があります。else if (preg_match("/blog\/*/", $this->query))
.... explode()
等...
私のシステムをより柔軟にするために、私は$routes
配列で何かを作る必要があります。 routes配列は別のファイルになります。
===サンプル入力と期待される結果===
URL:ブログ
$route['controller'] = Blog
$route['action'] = GetAll
$route['params'] = array()
URL:ブログ/私の初のポスト
$route['controller'] = Blog
$route['action'] = GetOne
$route['params'] = array('slug' => 'my-first-post')
URL:ブログ/ユーザ/マーティン/ページ2(ページ2はオプション)
$route['controller'] = Blog
$route['action'] = GetUserPost
$route['params'] = array('slug' => 'martin')
質問を編集し、サンプルの入力と予想される結果を追加します – reladawrefurhost