domain.com/application/controller/action/parameterN/valueN
ユーザーが入力するとき、またはサイト内の直接リンクでこのような URL を使用しています。
しかし、私が実装AJAX
するとき、フォームデータをサーバーに送信するときに使用する必要があるかもしれないことは知っています。jQuery
<form>
query string
しかし、私が実装した方法では、htaccess
クエリfront controller
文字列を使用して検出できません。私に何ができる?クエリ文字列を読み取る方法を実装するか、JavaScript で関数を作成して、クエリ文字列を美しい URL に変換しますか? どうすればそれを行うことができますか?
私の .htaccess ファイル:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?key=$1 [L]
私のphpファイル:
<?php
class System{
private $_url;
private $_explode;
public $_controller;
public $_action;
public $_params;
public function __construct(){
$this->setUrl();
$this->setExplode();
$this->setController();
$this->setAction();
$this->setParams();
}
private function setUrl(){
$_GET['url'] = (isset($_GET['url']) ? $_GET['url'] : 'index/index_action');
$this->_url = $_GET['url'] .'/' ;
}
private function setExplode(){
$this->_explode = explode( '/' , $this->_url );
}
private function setController(){
$this->_controller = $this->_explode[0];
}
private function setAction(){
$ac = (!isset($this->_explode[1]) || $this->_explode[1] == null || $this->_explode[1] == 'index' ? 'index_action' : $this->_explode[1]);
$this->_action = $ac;
}
private function setParams(){
unset( $this->_explode[0], $this->_explode[1] );
array_pop( $this->_explode );
if ( end( $this->_explode ) == null )
array_pop( $this->_explode );
$i = 0;
if( !empty ($this->_explode) ){
foreach ( $this->_explode as $val ){
if ( $i % 2 == 0 ){
$ind[] = $val;
}else{
$value[] = $val;
}
$i++;
}
}else{
$ind = array();
$value = array();
}
if( count($ind) == count($value) && !empty($ind) && !empty($value) )
$this->_params = array_combine($ind, $value);
else
$this->_params = array();
}
public function getParam( $name = null ){
if ( $name != null )
return $this->_params[$name];
else
return $this->_params;
}
public function run(){
$controller_path = CONTROLLERS . $this->_controller . 'Controller.php';
if( !file_exists( $controller_path ) )
die('Houve um erro. O controller nao existe.');
require_once( $controller_path );
$app = new $this->_controller();
if( !method_exists($app, $this->_action) )
die('Esta action nao existe.');
$action = $this->_action;
$app->$action();
}
}