我在bootstrap中的cakephp项目中使用以下代码来定义webroot路径之类的常量。是不是
$_ROOTPATH = strtolower('http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']);
$URLPART = explode('cake',$_ROOTPATH);
define('ROOTPATH',$URLPART[0].'cake/');
define('RESOURCEBASEPATH',$URLPART[0].'resources/');
define('DOCUMENTROOTPATH',substr($_SERVER['SCRIPT_FILENAME'],0,-9));
/var/www/
你对此有何看法?欢迎提出任何说明/建议。
答案 0 :(得分:2)
为什么不使用$_SERVER['DOCUMENT_ROOT']
答案 1 :(得分:1)
您不需要任何变量来获取webroot。
它始终只是/
。非常便利。
答案 2 :(得分:1)
关于文件路径,您是否查看了现有的core constants?您可能会发现您需要的大部分文件路径常量都已在那里定义。
例如,您的DOCUMENTROOTPATH
与(我相信)WWW_ROOT
常量完全相同。
对于网址,CakePHP的Router::url()
负责以一致的方式处理所有网址(例如,Controller::redirect()
,FormHelper
,HtmlHelper
等输出的网址。)
您还可以在需要创建网址的任何地方静态呼叫Router::url()
:
echo Router::url('/some/random/path');
// output: http://www.example.com/path/to/cake/some/random/path
echo Router::url(array('controller' => 'abc', 'action' => 'xyz'));
// output: http://www.example.com/path/to/cake/abc/xyz
除非我遗漏了某些内容,否则我只会使用上述内容,而不是使用ROOTPATH
和RESOURCEBASEPATH
之类的内容来乱扔你的应用程序。例如,以下方法是等效的:
$this->redirect(ROOTPATH . 'some/place'); // your way
// takes you to: http://www.example.com/path/to/cake/some/place
$this->redirect('/some/place'); // cake way
// takes you to: http://www.example.com/path/to/cake/some/place
echo $this->Html->image(RESOURCEBASEPATH . 'some/image.jpg'); // your way
// outputs: <img src="http://www.example.com/path/to/cake/resources/some/image.jpg" />
echo $this->Html->image('some/image.jpg'); // cake way
// outputs: <img src="http://www.example.com/path/to/cake/img/some/image.jpg" />
echo $this->Html->image('../resources/some/image.jpg'); // cake way
// outputs: <img src="http://www.example.com/path/to/cake/resources/some/image.jpg" />
答案 3 :(得分:0)
我正在使用它(假设我在使用我正在编写此代码的文件的正确文件夹中):
$path = realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR;
答案 4 :(得分:0)
这是相当古老的帖子,但万一有人想知道。这是$ this-&gt; webroot,它为您提供了应用程序的webroot。这可以在控制器&amp;观点也是如此。