2011-11-24 6 views
7

Let söylediğin her yöntemlerle kullanılmak üzere oturumu nasıl kontrol edilir, ben kullanıcı olmadan kullanılabilen bu tür get_book();read_book();remove_book();CodeIgniter'ın - <strong>Kitap</strong> adlı benim denetleyicisi de

sınıfında hiçbir yöntemleri gibi birçok yöntemler var giriş yaptım ve oturumdan user_id'u alabilirim.

Soruma user_id oturumunun ayarlanmış olup olmadığını kontrol etmenin en iyi yolları nedir?

if($this->is_logged_in() 
{ 
    //do something 
} 
else 
{ 
    //redirect to home 
} 

gibi

şimdi bir is_logged_in() yöntemi oluşturma düşünüyorum gelince

ve bir if-else deyimi ile her yöntemlerle uygulamak, bu uzun ve sıkıcı değil mi? Bunu başarmanın en iyi yolu var mı?

Ben bağlantıyı

codeigniter check for user session in every controller

okumak Ama ben hala her yöntemlerle de is_logged_in çek uygulamak zorunda gibi görünüyor.

Bana yardım ettiğiniz için teşekkür ederiz!

cevap

11

/application/core içinde MY_controller.php (önek yapılandırma dosyasında düzenlenebilir) adlı bir dosya oluşturun:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class MY_Controller extends CI_Controller { 


    function __construct() 
    { 

     parent::__construct(); 

     //Initialization code that affects all controllers 
    } 

} 


class Public_Controller extends MY_Controller { 

    function __construct() 
    { 
     parent::__construct(); 

     //Initialization code that affects Public controllers. Probably not much needed because everyone can access public. 
    } 

} 

class Admin_Controller extends MY_Controller { 

    function __construct() 
    { 
     parent::__construct(); 
     //Initialization code that affects Admin controllers I.E. redirect and die if not logged in or not an admin 
    } 

} 

class Member_Controller extends MY_Controller { 

    function __construct() 
    { 
     parent::__construct(); 

     //Initialization code that affects Member controllers. I.E. redirect and die if not logged in 
    } 

} 

Her zaman yeni bir denetleyici oluşturduğunuzda, hangi erişim gerektirdiğine siz karar verirsiniz

class Book extends Member_Controller { 

     //Code that will be executed, no need to check anywhere if the user is logged in. 
     //The user is guaranteed to be logged in if we are executing code here. 

//If you define a __construct() here, remember to call parent::__construct(); 
    } 

Bu, Book dışında başka bir üye denetleyiciye ihtiyacınız varsa, yalnızca Member_Controller ürününü genişletebileceğiniz için kod çoğaltmayı çok düşürür. Hepsinde kontrol yapmak zorunda kalmak yerine.

+0

Cevabınızı anladım, bu gerçekten DRY'yi takip ediyor ve farklı bir kullanıcı grubuna doğru iş kuralını uygulamamda bana yardımcı oluyor. Yardımınız için çok teşekkür ederim ve KEMAL Kernal :) – user826224

9

Bunu yapmak zorunda değilsiniz. Basitçe giriş kontrol kodunu kurucunun içine koy ve her şey yolunda!

class Book extends CI_Controller 
{ 
    public function __construct() 
    { 
     if ($this->is_logged_in()) 
     { 
      // redirect to home 
     } 
    } 

    public function get_book() 
    { 
     ... 
    } 

    // The rest of the code... 
} 
+0

Çok teşekkür ederim, test ettim ve kusursuz çalışıyor. Bağlantıdan güncellenmesi MY_Controller'ı uygulama/çekirdek altına almamız gerektiğidir. Yine yardımlarınız için teşekkürler :) İyi günler! – user826224

+2

@ user826224, yine de bu kodu kopyalamanız gerekiyor. Cevabım, bağlandığınızdan çok farklıdır, dikkatlice okumalısınız :) – Esailija

0

Sen gibi kumandanın yapıcı yöntemini kullanabilirsiniz:

 
if (! $this->session->userdata('logged_in')) 
    { 
      redirect('login'); 
    }