2017-12-06 3 views
-2

codeigniterでのルーティングに問題があります。 私のルーティングファイルは以下の通りです:Codeigniter 3.1.16ルーティングの問題

$route['admin/newgallery'] = 'gallery/do_upload'; 
$route['admin/listgallery'] = 'gallery/list'; 
$route['admin/create'] = 'posts/create'; 
$route['admin/listposts'] = 'posts/list'; 
$route['admin'] = 'admin/index'; 
$route['posts/(:any)'] = 'posts/view/$1'; 
$route['posts'] = 'posts/index'; 
$route['default_controller'] = 'pages/index'; 
$route['(:any)'] = 'pages/index/$1'; 
$route['404_override'] = ''; 
$route['translate_uri_dashes'] = FALSE; 

すべてのルートは最初の二つを除いてうまく動作:

$route['admin/newgallery'] = 'gallery/do_upload'; 
$route['admin/listgallery'] = 'gallery/list'; 

私はmypage/admin/listgalleryを入力すると、それは正しくgallery/listを呼び出します。問題は、元のコントローラ/メソッド(この場合はギャラリー/リスト)を使ってアドレスを入力すると、404エラーを呼び出す必要があるときにもリストページに移動することです。私が設定した他のすべてのルーティングルールは、最初の2つを除いてそれを行います!

+1

「orignalコントローラ/メソッド」とは何かを説明します。 – Tpojka

+0

https:// mysyte/gallery/listがエラーページに移動すると、 https:// mysyte/admin/listgalleryとhttps:// mysyte/gallery/listがリストページに移動します。 –

+0

あなたの前提は間違っています - あなたが直接呼び出すコントローラ/メソッドを持っているなら、もちろん動作します。それはルーティングとは関係ありません。ルーティングが魔法のように通常の操作よりも優先されると思っているようですが、観察したように、そうはしません。それであなたはあなたが達成しようとしていると思いますか? – TimBrownlaw

答えて

0

すぐに使用できるCodeigniterを使用すると、URLから任意のコントローラ/メソッドに直接アクセスできます。

それはあなたの欲求だった場合は、すべてのパラメータを渡すと、同じコントローラ/メソッドを指して10以上のURLを持つことができますので、それはまた、あなたが唯一の希望の場合にはそう...

をカスタムルートの作成を提供ルート設定で定義されているコントローラ/メソッドへのアクセス。

urlがroutes config配列に定義されているかどうかをテストする必要があります。

メインコードは、何かのような...

$this->load->helper('url'); 
if(!isset($this->router->routes[uri_string()])){ 
    show_404(); // Or whatever you want ... 
} 

であり、あなたは、あなたが保護したいあなたのコントローラのコンストラクタでこれを入れてしまうでしょう。

もちろん、共通のコントローラを作成し、この方法で保護したいコントローラを拡張することができます。

(推奨しません)または、本当に「ハッキー」を取得したい場合は、system/core/controllerコンストラクタに入れて、システム全体を広げることができます。だから、すべてをルートで定義する必要があります。 注:これは 'default_controller'を中断します。