2012-12-10 69 views
1

我見過幾個網站,談論如何使一個已登錄功能,讓它在每個頁面加載後自動運行,而不必調用每個控制器中的功能,並想知道是否有人可以指向我對其中的一個,因爲我失去了與我看到的少數人的聯繫。製作一個Codeigniter CMS幹

我發現這個網站,討論如何實現這一點:

philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY

我創建的擴展是CI_Controller擴展控制我的網站和主要站點MY_Controller一個MY_Controller以及Frontend_Controller我也有一個Backend_Controller來控制我創建的CMS。

我也有一個登錄控制器,它擴展了Backend_Controller。我的問題是如果我想爲整個後端區域運行if語句以查看是否存在會話變量isset,並且如果是,請檢查該值是否爲數字。如果是,那麼他們重定向到登錄,如果沒有,然後讓他們重定向到控制面板控制器,這也擴展了Backend_Controller。如果在Backend_Controller中聲明,我會這樣做嗎?

這就是我想到的。

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

class Backend_Controller extends MY_Controller 
{ 
    public function __construct() 
    { 
     parent::__construct(); 

     if (!!isset($this->session->userdata('xtr'))) && (!is_integer($this->session->userdata('user_variable_id')))) 
     { 
      redirect('login'); 
     } 
    } 
} 

這是正確的方法來實現這一目標和正確的位置嗎?如果是這樣,我會爲登錄控制器或其他控制器做特定的事情來管理用戶嗎?

或者有沒有更好的主意來處理這個問題?

回答

1

這個問題對於codeigniter來說確實不是古怪的/獨特的,這更多的是面向對象/基於類的問題,然後是其他任何東西。在意見問題上的問題會更好地問如何從另一個類中擴展一個類,以及我可以在我的類的構造函數中實際添加些什麼。但是,這是說和更多的靜音點,也許我只是finiky手段。那

對象/類在這方面你有構造/解構器。您通常可以放置變量和函數調用。但我不知道if語句是否可以工作,也許如果你在類中包含相同的if-else的函數/方法,並且讓它做出相應的出價,它會比在結構中有更好的工作。

不過我根據我讀了一段時間回來,從那以後發生了很多變化外出時..

我想說看看

What can I add in constructors in PHP?

http://php.net/manual/en/language.oop5.decon.php

這可能會更好地幫助你,那麼我現在可以用它,因爲它已經是一個全球性的e因爲我做了一個完整的課程,現在我創建了比現在更多的方法,而且我知道從PHP v 5.3.2到5.3.3,由於與較老的php和更新的兼容性,整個邏輯的工作方式發生了一些變化。所以我認爲這更多的是提供指導的手段,而不是直接回答問題。

我將依賴於可能的風險敞口,最有可能依賴於您的PHP版本的機會是一個if-else,在構造中不是您想要做的事情,而是從構造中調用一個方法。