1

メソッドにアクセスするための URL は次のようになります: http://localhost/site/cont/method GET メソッドを使用してこのメ​​ソッドにアクセスしたい のですhttp://localhost/new-tera/paper/lookup_doi/segmentが、私のsegment部分は既に/次のように含まれています:

http://localhost/lookup_doi/segment/containing/slashessegment/containing/slashes全体が 1 つの値 であることに注意してください。

次のように、メソッドでこの値を取得しています。

public function method ($variable)
{
  echo $variable;
}

//出力: セグメント

and not : セグメント/含む/スラッシュ

4

4 に答える 4

7

CodeIgniter は残りを追加の引数として渡します。追加の引数を指定するか (数が固定されている場合)、次を使用できます。

implode('/', func_get_args ())

文字列全体を取得します。

于 2012-05-15T19:09:48.920 に答える
2

.htaccess である必要があります

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

じゃあ良いよ...

$route = empty($_GET['route']) ? '' : $_GET['route'];
$exp = explode('/', $route);

結果:

$exp[0] = new-tera
$exp[1] = paper
$exp[2] = lookup_doi
$exp[3] = segment

したがって、ルーティングが必要です。実行例(私のプロジェクトで):

 if($exp[0] == '')
        {
          $file = $_SERVER['DOCUMENT_ROOT'] .'/controllers/controller_index.php'; 
        }
        else
        {

          $file = $_SERVER['DOCUMENT_ROOT'] .'/controllers/controller_'.$exp[0].'.php'; 
        }    
        if(!file_exists($file))
        {
            engine :: away(); 
        }


        include_once $file;


        $class = (empty($exp[0]) or !class_exists($exp[0])) ? 'class_index' : $exp[0];


        $controller = new $class;

        $method = (empty($exp[1]) or !method_exists($controller, $exp[1])) ? 'index' : $exp[1];



        $controller -> $method();
于 2012-05-15T20:28:38.417 に答える
1

クエリ文字列に「%2F」を追加することでスラッシュを追加できます。これが機能することを願っています

segment = 'somethingwith%2F'
http://localhost/new-tera/paper/lookup_doi/segment
于 2012-05-15T19:13:56.350 に答える
1

最初に base64 でエンコードし、後でデコードできます。実際、さまざまな方法を使用して / を別のもの (つまり -) に変更したり、元に戻すことができます。

echo site_url('controller/method/' . base64_encode($variable));

public function method ($variable) { $variable = base64_decode($variable); }

于 2012-05-15T19:24:58.743 に答える