Genel yaklaşım olarak, MVC yapısında farklı kullanıcı yetkileri ve tipleri tanımlandıkça, Controller kodlarının herbir kullanıcı için yeniden yazılması gerekir.
Model dosyalarının ortak kullanımı sözkonusu olacağı için bunlardaki kodların tekrarlanmasına gerek yoktur. Ancak, Controller kodları için durum farklıdır. Bazı durumlarda birbirine yetki bakımından çok yakın ya da bazı Controller methodlarının aynı olması durumunda, farklı kullanıcı tipleri için aynı kodlar kopyalanıp durur.
Bu tekrardan kaçınmak amacı ile şöyle bir yaklaşım getirilebilir: HMVC kullandığımızı düşünelim. Dashboard isimli modül altında Admin ve Limited isimli iki farklı yetkiye sahip iki kullanıcı olsun. Her iki kullanıcının da ortak kodları aynı isimli bir Controller dosyasında oluşturalım. Application/modules/dashboard/dashboard_controller.php isimli dosyanın içeriği :
<!--?php
class Dashboard_Controller extends MX_Controller {
function __construct() {
parent::__construct();
if(! $this--->hmvc_auth->get('logged_in')) redirect(base_url());
}
function index()
{
echo "ERROR! No Pasaran!";
}
protected function main_show_all(){
echo 'Admin ve Limited user ortak oalrak iceride';
}
protected function main_change_admin(){
echo 'Admin user Change method icin icerdesin';
}
protected function main_change_limited(){
echo 'Limited user Change method icin icerdesin';
}
}
?>
Yukarıda her kullanıcı için ortak olan kodlar bir araya toplanmıştır. Methodların sadece Admin ve Limited controller dosyalarından bu dosyaya yapılacak istemlerde çalışması için methodlar PROTECTED olmalıdır. HMVC kullanılması nedeniyle, Dashboard_controller< dosyası MX_Controller sınıfını EXTEND etmektedir./p>
Admin kullanıcı için yazılacak modüle ait controller dosyası olan Application/modules/dashboard/admin.php dosyasının içeriği ise:
<!--?php
/*
Admin user Dashboard Controller
*/
require_once('dashboard_controller.php');
class Admin extends Dashboard_Controller {
function __construct() {
parent::__construct();
if(! $this--->hmvc_auth->is_admin()) redirect(base_url());
}
function show(){
$this->main_show_all();
}
function change(){
$this->main_change_admin();
}
}
?>
Yukarıdaki kodlarda öncelikle dashboard_controller.php dosyası çağırılır. Admin sınıfının Dashboard_Controller sınıfını extend etmesine dikkat edilmelidir. Show isimli method, hem Admin hem de Limited user için aynıdır. Bu nedenle Dashboard_controller dosyasındaki karşılığı olan main_show_all ismi ile çağrılmaktadır.
Ancak, change methodu Admin ve Limited user için farklıdır. Bu nedenle Dashboard_controller dosyasından main_change_admin() isimli method çağrılmalıdır.
<!--?php
/*
Limited user Dashboard Controller
*/
require_once('dashboard_controller.php');
class Limited extends Dashboard_Controller {
function __construct() {
parent::__construct();
if(! $this--->hmvc_auth->is_limited()) redirect(base_url());
}
function show(){
$this->main_show_all();
}
function change(){
$this->main_change_limited();
}
}
?>
Application/modules/dashboard/limited.php dosyasının içeriği ise yukarıdadır. Limited kullanıcısı için show() methodu Admin user ile aynı iken, change() methodu farklıdır. Bu nedenle Dasboard_controller dosyasından Limited user için kullanılmak üzere main_change_limited() isimli methodu çağırmaktadır.
Bu yöntem ile ortak Model dosyası kullanımına benzer olarak, ortak Controller dosyası kullanımı yapılabilir. Sonuçta kodların farklı kullanıcılar için tekrarlanmasının önüne geçilmiş olur.
Bu yöntem kullanılırken dikkat edilecek noktalar:
- Ortak Controller dosyasındaki methodların PROTECTED olmalıdır.
- Ortak Controller dosyasında kullanıcının LOGIN olduğu kontrol edilmelidir.
- Ortak Controller dosyasındaki method isimleri, kullanıcı dosyalarındaki method isimlerinden farklı olmalıdır (show ile main_show_all gibi...).
- Kullanıcı dosyalarında (admin.php, limited.php) ortak Controller sınıfının REQUIRE_ONCE ile çağrılmaldır.
- Kullanıcı dosyalarında (admin.php, limited.php) ortak Controller sınıfının EXTEND edilmelidir.
Yazarı : Fatih BAZMAN | Yorum Ekle | Etiketler : hmvc modular CI2.1
Türkiye