web-dev-qa-db-ja.com

CodeIgniterを使用したサブフォルダーのコントローラーのルーティング

システムのフロントエンドとバックエンドを分離したいので。フロントエンドとバックエンドとしてコントローラー内に2つのフォルダーを作成しました

以下は私のコントローラフォルダの構造です

controller
 --frontend
   ---store.php
   ---processing.php
   ---profile.php
   ---authenticate.php
   ---register.php 

 --backend
   ---authenticate.php
   ---stats.php
   ---users.php
   ---property_manage.php
   ---register.php 

を使用して機能にアクセスできます

frontend/store/add
frontend/store/manage
......

backend/stats/sales
backend/stats/payments
.....

しかし、URLからフロントエンドとバックエンドのセグメントを削除したいと思います。

Codeigniterでルーティング機能を確認しましたが、私の知識によれば、各ルートを個別に指定する必要があります。私には約12のコントローラーがあり、それぞれに約10 -15の機能があるので、ルートにすべての機能を指定する必要があるかもしれません。

ルーティングまたは他の方法を使用して達成する他の効率的な方法はありますか? (htaccessを使用せずに)

21
LiveEn

これを行う:

$route['store/(:any)'] = 'frontend/store/$1';
$route['processing/(:any)'] = 'frontend/processing/$1';
$route['profile/(:any)'] = 'frontend/profile/$1';

バックエンドにも同じ:

$route['backend/(:any)'] = 'backend/authenticate/$1';

コントローラーのすべての機能について、routes.phpに各ルールを作成する必要はありません。前述のように、コントローラーごとに1つのルールで十分です。

RIルーティング:CodeIgniterユーザーガイド

$1は最初の式を表します。ここで(:any)は式です。各ルールに複数の式を含めることができ、式は$1$2などとして表されます。向こう側。

同様に、(:num)は数字のみを含むセグメントと一致し、(:any)は任意の文字を含むセグメントと一致し、(\d+)は任意の数字と一致し、([a-z]+)は任意のアルファテキストと一致します。

24
hsuk

どういうわけか、フロントエンドとバックエンドを区別できる必要があります。たぶん、 "admin"のあるURIをバックエンドに転送し、 "admin"のないURIをフロントエンドに転送するルートを設定します。

1
swatkins

フロントエンドの場合、これをroutes.phpに追加できます:

$this->set_directory( "frontend" );

したがって、ブラウザのURLに「フロントエンド」を含める必要はありません

1
Vishnu Ugale