2014-07-27 32 views
0

在CakePHP應用程序中,我有一個模型Acccount。我希望每個帳戶在webroot/img文件夾中都有自己的子文件夾。我可以創建子文件夾沒有問題。CakePHP - 動態更改core.php變量'imageBaseUrl'

挑戰在於普遍識別哪個是當前默認路徑。我可以從Auth.User.account_id獲得一個帳戶ID。

我不認爲通過引入Auth.User.account_id來修改每個視圖所需的img路徑,而是通過讀取core.php文件中的值動態更改默認圖像路徑並更改'imageBaseUrl'在那裏,所以它可以在整個應用程序。

但是,我沒有找到任何有關如何將變量放入core.php文件的文檔。我知道這是一個旨在將變量傳遞給應用程序的文件,所以也許這是不可能的。

我試圖提供配置::寫入值如下所示,但似乎沒有在core.php文件中讀取。

* Web path to the public images directory under webroot. 
* If not set defaults to 'img/' 
Configure::write('App.imageBaseUrl', 'img/'.Configure::write('imageurl').'/'); 

是否有某種方式帶來了可變進core.php中的文件,或者有一個可以動態改變依賴於應用程序變量的圖像路徑的另一種方法?

回答

2

你可以在你的AppControllerbeforeRender()回調需要App.imageBaseUrl更改值。由於該值只在視圖中需要,因此在該點之前無需更改。另外,您將擁有可用的會話組件。

+0

它也適用於AppController beforeFilter()所以同樣的問題;哪裏是'正確'或'最好'​​(最有效率?)的地方來改變配置::寫入('App.imageBaseUrl','img')'img值?我想如果我想通過新文件夾到控制器,beforeFilter是最好的。否則它並不重要? Thx – curtisp

+0

因爲這涉及到在beforeRender()中執行它是正確的地方。它更高效,因爲它避免了POST請求的額外語句,當您在執行所需的操作後通常只是重定向。如果您希望有關新文件夾的信息可用,那麼您可以在beforeFilter()中執行此操作,但實際上並不明白爲什麼某個操作會關心資產位置。 – ADmad

0

最好不要修改core.php。試試這個代碼段,你的應用程序/配置/ bootstrap.php中文件的開頭:

App::uses('CakeSession', 'Model/Datasource'); 
Configure::write('App.imageBaseUrl', 'img/' . 
    (CakeSession::check('Auth.User') ? CakeSession::read('Auth.User.account_id') . '/' : '')); 
+0

這工作不知道爲什麼它downvoted。但是,它也適用於AppController beforeRender(),正如ADmad所描述的。有人可以解釋downvote和/或適當的地方做到這一點,例如AppController beforeRender或bootstrap.php? – curtisp