私はphp mvcを試していますが、次の問題に悩まされています。私のリクエストとルータークラスは本当にシンプルで、サブフォルダーからのコントローラー呼び出しを処理できるようにテーマを拡張したいと思います。コントローラークラス関数は、get と post をスローして送信する URL 変数を取得できる必要があります。
私のルーターは次のようになります
class Router{
public static function route(Request $request){
$controller = $request->getController().'Controller';
$method = $request->getMethod();
$args = $request->getArgs();
$controllerFile = __SITE_PATH.'/controllers/'.$controller.'.php';
if(is_readable($controllerFile)){
require_once $controllerFile;
$controller = new $controller;
if(!empty($args)){
call_user_func_array(array($controller,$method),$args);
}else{
call_user_func(array($controller,$method));
}
return;
}
throw new Exception('404 - '.$request->getController().'--Controller not found');
}
}
およびリクエストクラス
private $_controller;
private $_method;
private $_args;
public function __construct(){
$parts = explode('/',$_SERVER['REQUEST_URI']);
$this->_controller = ($c = array_shift($parts))? $c: 'index';
$this->_method = ($c = array_shift($parts))? $c: 'index';
$this->_args = (isset($parts[0])) ? $parts : array();
}
public function getController(){
return $this->_controller;
}
public function getMethod(){
return $this->_method;
}
public function getArgs(){
return $this->_args;
}
}
問題は、スローされた ajax をコントローラ メソッドに送信しようとすると、URL 構造が原因で認識されないことです。例えば
index/ajax?mod_title=shop+marks&domain=example
見えるだけで受け入れられる
index/ajax/shop+mark/example