0

多くのコントローラーで同じになる約9行のコードがあります。それらはインデックスに入り、ユーザーがログインしているかどうか、どのレベルのアクセスが許可されているかを確認し、いくつかのセッション変数を取得するために使用されます。完全な関数ではないコードのスニペットを含める最良の方法は何ですか?

スニペットはすべてのコントローラーにあるわけではなく、アプリケーションの管理セクションを構築するコントローラーにのみ含まれています。

1 行のコードを使用してスニペットを含めることができれば素晴らしいのですが、私は CodeIgniter を初めて使用するので、ベスト プラクティスから逸脱したくありません。これを視覚化するのに役立つ簡単な例を含めることができれば. ありがとう!

4

2 に答える 2

1

基本 CI コントローラーの拡張機能を作成し、そこでチェックを行いたいと考えています。コアの拡張は、次のドキュメントにあります: http://ellislab.com/codeigniter/user_guide/general/creating_libraries.htmlネイティブ ライブラリの拡張部分まで下にスクロールします。

新しいコントローラーでは、次のようなことができます。

<?PHP
    class MY_Controller extends CI_Controller
    {

   function __construct()
   {
    parent::__construct();  //Gets all the CI_Controller functions and makes them available to this controller.
    if($this->session->userdata('is_logged_in')
    {
            $this->load->model('categories');
    $this->categories=$this->categories->getAllCategories();
    }

       }
     }

次に、他のコントローラーでは、次のように CI_Controller の代わりに MY_Controller を使用します。

<?php

class Pages extends MY_Controller {

明らかに、ロードする独自のチェックと変数がありますが、これで一般的なアイデアが得られるはずです。上記の例では、$this->categories を使用して、MY_Controller でロードされたアプリケーション内の任意の場所でカテゴリを取得できるようになりました。

于 2012-11-17T14:59:31.807 に答える
0

「メイン」テンプレート ファイル (views/template.php) を使用しています。

// views/template.php

<?php $this->load->view('includes/header'); ?>

<?php $this->load->view('includes/' . $main_content); ?>
<?php $this->load->view('includes/sidebar'); ?>

<?php $this->load->view('includes/footer'); ?>

したがって、ビューのディレクトリ構造は次のようになります。

--views
  --includes
      - header.php
      - footer.php
  - template.php 

フォルダ内でわかるview/includes/ように、「header.php」、「footer.php」などの再利用可能なスニペットを使用しています...

したがって、コントローラー内で、このメイン テンプレート ファイルを読み込んでいます。

class MyController extends CI_Controller {
    public function index()
    {
        //...
        $this->load->view('template',$data);
    }
}

したがって、「template.php」が読み込まれます。$data 内部の header.php、footer.php も使用できます。

ただし、これは必要に応じて変更できます。これは単なる「基本的な」アイデアです..

于 2012-11-17T13:51:27.447 に答える