2013-03-16 61 views
0

我有一個前端控制器,它可以設置頁面中的各種元素。但是,我想到可能有些元素的順序不正確。我的意思是,某些元素可能需要在其他元素之前使用/聲明。正確控制前端控制器的代碼?

或者換句話說:我是否以最好/正確的方式構建了文件。例如session_start()應該在'ini_set()之後'等等。

ini_set('session.use_cookies', 1); 
ini_set('session.use_only_cookies', 1); 
ini_set('session.use_trans_sid', 0); 

$mytimeout = 720 * 60; // (12hrs*60m=720) // minutes * 60 
session_set_cookie_params($mytimeout); 

$sessdir = "../application/data"; 
ini_set('session.save_path', $sessdir); 

session_cache_expire($mytimeout/60); 
ini_set('session.gc_maxlifetime', $mytimeout); 

session_start(); 

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

require_once('../application/models/front.php'); 
require_once('../application/models/icontroller.php'); 
require_once('../application/models/view.php'); 
require_once('../application/models/db.php'); 
require_once('../application/models/sconfig.php'); 
require_once('../application/models/acl.php'); 

require_once('../application/controllers/index.php'); 
require_once('../application/controllers/user.php'); 
require_once('../application/controllers/error.php'); 
require_once('../application/controllers/blog.php'); 
require_once('../application/controllers/about.php'); 

function exception_handler($exception) { 
    echo "Sorry something went wrong; And or we couldnt find what you requested.<br />We suggest you go back to our <a href=\"/\">home page</a> and try again.<br />We have logged this request in order to provide a better service.<br /> *** ". $exception->getMessage()." ***"; 

} 

set_exception_handler('exception_handler'); 

$fc = FrontController::getInstance(); 
$c=$fc->getController(); 
$a=$fc->getAction(); 

$users=ACL::getInstance(); 
$sid=session_id(); 

if(isset($_SESSION['HTTP_USER_AGENT'])){ 
    if($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])){ 
    session_regenerate_id(TRUE); 
    $_SESSION=array(); 
    $users->removeUser($sid); 
    if(($c!='error')&&($a!='badsession')){ 
     $fc->redirect("error/badsession"); 
    } 
    } 
} 
else{ 
    $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']); 
} 

$dbh=DBConnection::getInstance(); 

setcookie('ct', 1,0,"/"); 

$config = Configuration::getInstance(); 
$cf=array(); 
$cf=$config->getall(); 

$users=ACL::getInstance(); 
$users->addUser(); 
$users->removeOld(); 

$front = FrontController::getInstance(); 

$front->route(); 
echo $front->getBody(); 
+0

你的代碼是否工作或者是否會產生異常?順便說一句,你已經在同一個腳本中分配了一個'FrontController'實例3次。 'ACL'類似的模式。 – Bart 2013-03-16 14:15:18

+0

@本地代碼工作正常:)我只是想知道如果我已經以最好的方式構建文件。例如session_start()應該在'ini_set()之後'等等。是的,有一些多餘的單身人士。 – Chris 2013-03-16 16:58:22

+0

更新了我的回答 – Bart 2013-03-16 19:41:15

回答

0

事情的順序可以稍微調整一下。 這將是我所選擇的次序:

  1. 首先的一切我都放在error_reporting呼叫頂部,從而有望你所擁有的一切報告錯誤。
  2. 然後設置exception_handlerexception_handler所以你可以抓住一切。
  3. 做所有的ini_set調用。
  4. require所有必需的腳本。
  5. session_start開始會話。如果以上所有情況都很好。
  6. 做另一個邏輯。

注意

這不是一個使用單件非常好的主意。特別是在你使用它們的音量中。 請看這裏爲什麼這是What is so bad about singletons? 最好忘掉單身人士的使用。 單身人士讓你不小心代碼設計,我很抱歉地說。它顯示在你的例子中:-)

+0

是的,我讀了很多網站關於不良習慣的單身人士;我想它就像瑪米特一樣,你要麼喜歡它,要麼恨它。大聲笑:)我個人認爲他們完美實現組成。 **你的答案是有道理的,雖然我想在做任何事之前我應該​​做session_start()。 – Chris 2013-03-16 20:47:13

+0

如果一切都包含在類中,那麼**否**。我會先要求然後開始會話。只是因爲它不需要。如果您的代碼取決於可以在包含腳本時執行的會話,那麼**是** – Bart 2013-03-16 21:17:06