從smarty檔案結構部署看物件導向中路徑的作用域

myDCool發表於2012-03-09
public function __construct()
{
// selfpointer needed by some other class methods
$this->smarty = $this;
if (is_callable(`mb_internal_encoding`)) {//多位元組編碼
mb_internal_encoding(SMARTY_RESOURCE_CHAR_SET);
}
$this->start_time = microtime(true);
// set default dirs DS在windows下是字元‘’linux下是‘/’
$this->template_dir = array(`.` . DS . `templates` . DS);//即‘. emplates’當前資料夾下的templates資料夾內
$this->compile_dir = `.` . DS . `templates_c` . DS;//即‘. emplates_c’
        $this->plugins_dir = array(SMARTY_PLUGINS_DIR);
$this->cache_dir = `.` . DS . `cache` . DS;
$this->config_dir = array(`.` . DS . `configs` . DS);
$this->debug_tpl = `file:` . dirname(__FILE__) . `/debug.tpl`;
if (isset($_SERVER[`SCRIPT_NAME`])) {
$this->assignGlobal(`SCRIPT_NAME`, $_SERVER[`SCRIPT_NAME`]);//當前指令碼的名字
}
}

①上邊的程式碼是Smarty類的建構函式原始碼,所在檔案是:E:APMServwwwhtdocszf wosmartySmarty.class.php

②我在另一個檔案中(ZF的入口檔案中)將該檔案包含進來:E:APMServwwwhtdocszf woindex.php

<?php
·········
$registry = new Zend_Registry();

require_once(`Smarty.class.php`);
$views = new Smarty();

$registry->set(`view`, $views);
··········

③我在第三個檔案中使用這個new出來的物件:E:APMServwwwhtdocszf woapplicationcontrollersHelloController.php

<?php
require_once(`Zend/Controller/Action.php`);
class HelloController extends Zend_Controller_Action
{
public function helloAction()
{
$smarty = Zend_Registry::get(`view`);

$smarty->assign(`name`,`zhangsan`);
$smarty->display(`hello.phtml`);
}

}

問題是:①中smarty的建構函式預設的templates和templates_c等等檔案應該和smarty.class.php在同一資料夾下,那麼我在②中new這個類生成物件,③檔案中使用這個物件,那我到底應該把templates和templates_c等等資料夾建在那裡呢

結果:應該與new這個類的語句所在的檔案建在同級目錄下,否則會出現:

SmartyException: Unable to load template file
`hello.phtml` in
E:APMServwwwhtdocszf wosmartysyspluginssmarty_internal_templatebase.php

當然你沒有用smarty預設的路徑,而是另外指定的路徑,那就看你指定到哪裡了


相關文章