しばらく前に、これらのことをcodeignierで処理する方法をブログで説明しましたが、ブログは閉じられており、それらのいくつかにはまだ同じ質問があります。
開始するには、アプリケーションを準備します。
展開ルート:
routes.php (/system/application/config/routes.php)を開きます
次の行を追加します。
$ route [ '(ru | en)' ] = $ route [ 'default_controller' ];
$ route [ '(ru | en)/(。+)' ] = "$ 2" ; *このソースコードは、 ソースコードハイライターで強調表示されました。
したがって、次の3つの方法で、任意のメソッド、任意のコントローラーにアクセスできます。
www.yourapp /コントローラー/アクション
www.yourapp / ru / controller / action
www.yourapp / ja /コントローラー/アクション
また、2つの言語ファイルinterface_lang.php (/system/application/language/english/interface_lang.phpおよび/system/application/language/russian/interface_lang.php)を作成します
言語の準備が完了しました。次に、アクセス制御を準備します。
アクセス制御には、Zend_Aclを使用します。 非常に便利なことです。
ZendFrameworkをダウンロードしてください。 拡張機能フォルダー(システム/拡張機能)を作成し、そこにライブラリー/ Zendフォルダーを転送します
次に、2つのヘルパーを作成します。
zend_framework_loader_helper.php (/system/application/helpers/zend_framework_loader_helper.php)
<? php
if (!defined( 'BASEPATH' ))exit( '直接スクリプトアクセス不可' );
//
ini_set( 'include_path' 、ini_get( 'include_path' ).PATH_SEPARATOR.BASEPATH。 'extensions /' );
require_once( 'Zend / Loader.php' );
Zend_Loader :: loadClass( 'Zend_Acl' );
Zend_Loader :: loadClass( 'Zend_Acl_Role' );
Zend_Loader :: loadClass( 'Zend_Acl_Resource' );
*このソースコードは、 ソースコードハイライターで強調表示されました。
およびzend_framework_acl_helper.php (/system/application/helpers/zend_framework_acl_helper.php)
<? php
関数init_roles(){
$ acl = new Zend_Acl();
//リソース/コントローラーを定義します
$ acl-> add( new Zend_Acl_Resource( 'login' ));
$ acl-> add( new Zend_Acl_Resource( 'welcome' ));
$ acl-> add( new Zend_Acl_Resource( 'logout' ));
//ロールを定義します
$ acl-> addRole( new Zend_Acl_Role( 'guest' ));
$ acl-> addRole( new Zend_Acl_Role( 'member' ));
//アクセスを定義します
$ acl-> allow( 'guest' 、 'login' );
$ acl-> deny( 'guest' 、 'welcome' );
$ acl-> deny( 'guest' 、 'logout' );
$ acl-> deny( 'member' 、 'login' );
$ acl-> allow( 'member' 、 'welcome' );
$ acl-> allow( 'member' 、 'logout' );
return acl;
}
*このソースコードは、 ソースコードハイライターで強調表示されました。
ここでは、3つのコントローラーで構成される小さなアプリケーションがあり、必要なことを意味します
2つのユーザーグループのみを作成する
次に、 autoload.php (/system/application/config/autoload.php)を開きます
ヘルパーを追加します
$ autoload [ 'helper' ] = array( 'zend_framework_loader' 、 'zend_framework_acl' );
*このソースコードは、 ソースコードハイライターで強調表示されました。
準備が完了しました。これですべての使用を開始する必要があります。
つまり、このすべての検証をコントローラーに実装します
コントローラーの機能を拡張するには、いくつかの方法があります。
1.コンストラクターに必要なアクションを記述します。
2. _remap()メソッドでも同じことを行います。
3.コントローラークラスを拡張し、そのコントローラーを継承します。
最初の2つの方法は、コントローラーに固有の機能を追加する必要がある場合に適していますが、この方法ですべてのコントローラーに同じことを書くと、コードが重複します。
したがって、3番目の方法を検討します。
ユーザー情報(彼のID、名前、グループメンバーシップなど)は、codeigniterの標準セッションメカニズムを使用して、セッション内のセッションに保存されると仮定します。
それでは始めましょう:
ファイルMy_Controller.php(/system/application/libraries/My_Controller.php)を作成します
<? php
class MY_Controller extends Controller {
private $ resource = null ;
private $ priviledge = null ;
//デフォルトのユーザー役割
private $ default_role = 'guest' ;
プライベート $ ci;
プライベート $ acl;
プライベート $言語;
パブリック関数MY_Controller(){
親::コントローラー();
//言語を定義します
$ lang = $ this-> uri-> segment(1);
if ($ lang == 'en' ){
$ this-> language = $ lang;
}
その他 {
$ this- > language = 'ru' ;
}
//目的の言語をロードします
スイッチ ($ lang):
ケース 「en」 :
$ this-> lang-> load( 'interface' 、 'english' );
$ this-> config-> set_item( 'language' 、 'english' );
休憩 ;
ケース 'ru' :
$ this-> lang-> load( 'interface' 、 'russian' );
$ this-> config-> set_item( 'language' 、 'russian' );
休憩 ;
デフォルト :
$ this-> lang-> load( 'interface' 、 'russian' );
$ this-> config-> set_item( 'language' 、 'russian' );
休憩 ;
エンドスイッチ;
// zend_framework_alc_helper.phpからinit_rolesを呼び出します
$ this-> acl = init_roles();
//ルーターを使用してコントローラーとメソッドを決定します
$ router =&load_class( 'Router' );
//コントローラをクラスに設定し、メソッドを特権に設定します
$ this-> resource = $ router-> fetch_class();
$ this-> priviledge = $ router-> fetch_method();
//便宜上、後でアプリケーションで初期化しないようにするため
$ this-> ci =&get_instance();
$ acl = $ this-> getACL();
//ユーザーが存在する場合、データを操作します
if ($ this- > session-> userdata ( 'userInfo' )){
$ identity = $ this- > session-> userdata ( 'userInfo' );
$ this- > setDefaultRole($ identity [ 'user_role' ]);
}
//ユーザーが認証されていない場合(ゲスト)が何かを要求しようとしている場合、認証ページにリダイレクトします
if (!$ acl-> isAllowed($ this-> getDefaultRole()、$ this-> getResource()、$ this-> getPriviledge())&& $ this-> getDefaultRole()== 'guest' ){
リダイレクト( 'login' 、 'refresh' );
}
//ユーザーが認証されていて、アクセスのない場所で何かを要求しようとした場合、認証ページにリダイレクトします
elseif(!$ acl-> isAllowed($ this-> getDefaultRole()、$ this-> getResource()、$ this-> getPriviledge())&& $ this-> getDefaultRole()!= 'guest' ){
リダイレクト( 'welcome' 、 'refresh' );
}
}
//セッターとゲッター
パブリック関数getInstance(){
return $ this-> ci;
}
パブリック関数getACL(){
return $ this-> acl;
}
パブリック関数getDefaultRole(){
return $ this-> default_role;
}
パブリック関数getPriviledge(){
return this-> priviledge;
}
パブリック関数getResource(){
$ this->リソースを返します。
}
パブリック関数setDefaultRole($ロール){
$ this-> default_role = $ role;
}
パブリック関数getLang(){
$ this-> language;
}
}
*このソースコードは、 ソースコードハイライターで強調表示されました。
それは実際、さらにすべてです。新しいコントローラーを作成するときは、単に置き換えます
クラス Welcomeコントローラーの拡張{
パブリック関数Welcome(){
親::コントローラー();
}
}
*このソースコードは、 ソースコードハイライターで強調表示されました。
に
クラス WelcomeはMY_Controllerを拡張します{
パブリック関数Welcome(){
親:: MY_Controller();
}
} *このソースコードは、 ソースコードハイライターで強調表示されています。
そしてあなたは働くことができます))