2014-07-27 33 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