2010-03-09 31 views
3

我现在在CakePHP中工作。我想知道我可以如何定义一个非cakephp文件的路径,它没有任何控制器与之相关联?CakePHP - 我如何定义路由到一个非cakephp文件,没有任何控制器与之关联?

为了方便起见,我已将该文件(sitemap.php)放在webroot文件夹中。现在我需要以某种方式路由它!

+0

你能给出一个你想要的路线种类的例子吗?你只是想将'/ folder/subfolder/sitemap.php'映射到那个脚本中吗?你想剥去'.php'并使用'/ folder/subfolder/sitemap'吗?你想要使用URL /路径中的项目作为参数,比如'/ folder/subfolder/sitemap/arg0/arg1/arg2 /'? 无论如何,你会想看看htaccess文件;我怀疑答案不在CakePHP中,而是在服务器配置中。 – 2010-03-09 14:37:31

+0

我设法用.htaccess文件替换sitemap.xml与sitemap.php。但我不知道如何在routes.php中定义路由,因为没有与其关联的控制器。 对www.domain/sitemap.xml的调用应该从documentRoot/app/webroot/sitemap.php中获取文件 - 这是我的需要! 不,我不想通过任何争论。 – TomyLeeJhones 2010-03-09 14:44:37

回答

1

如果你没有真正使用它,我会跳过整个CakePHP过程。除非你的.htaccess过于贪婪(重写请求到文件*存在*),否则你应该能够直接访问sitemap.php。如果不能,请更新.htaccess文件以不重写现有文件。

现在,如果外部服务需要将文件设置为`sitemap.xml',不要试图在CakePHP中重写,只需用.htaccess文件重写(通过您的评论,您可能正在做什么? )。

底线:除非必须重写,否则不要用CakePHP重写,如果你甚至不使用它。

+0

好吧,我已经成功地鳕鱼这样的事情在DocumentRoot的发现.htaccess文件: 重写规则^/sitemap.xml的$应用程序/ Web根目录/ custom_scripts/sitemap.php 但它不工作,因为它似乎! – TomyLeeJhones 2010-03-09 16:04:20

+0

威特厅应有的尊重,为什么只有使用蛋糕才能做到这一点,为什么会使配置复杂化?如果您不需要通过蛋糕路由到它,只要在apache上启用重写功能并将cakephp实例使用它附带的.htaccess文件运行,将其放入webroot中就可以工作。只需将php文件放入webroot目录并在URL上调用即可: http://mysite/sitemap.php 只要apache启用了重写并且cakephp实例正在使用,它就会工作。它附带的htaccess文件。 – 2010-03-09 16:13:32

+0

阅读更多信息后,这似乎是正确的解决方案,以指定的需要。 +1 – 2010-03-09 16:20:44

2

这听起来像你想在cakephp应用程序中使用来自sitemap.php的功能。在cakephp中加入这个方法的赌注是将其设置为供应商。遵循这些步骤:

1-将该文件放入应用程序/供应商文件夹中。 2至使用该文件在控制器(或其他地方),地址:

App::import('Vendor','sitemap'); 

如果它仅仅是一个功能的列表文件,你现在可以简单地调用的函数,你会在其他任何PHP文件。所以,如果你有一个功能叫做show_links()例如,在已经导入供应商/网站导航控制器,你只需把:

show_links(); 

如果它是一个类,则需要将类实例

App::import('Vendor','sitemap'); 
$sitemap = new Sitemap; 
$sitemap->show_links(); 

所以,现在你已经准备好建立路由,以包括在config/routes.php文件文件中的网站地图的功能:和你一样会在其他地方使用它

Router::connect('/sitemap.xml', array('controller' => 'YOUR_CONTROLLER', 'action' => 'YOUR_ACTION')); 

钍将处理动作中包含的代码序列,然后播放sitemap.php文件。

所以,总之,你会看到这样的事情:

<?php 
class SiteMapController extends AppController 
{ 
    var $name = 'Tests'; 
    function show_map() 
    { 
    App::import('Vendor','sitemap'); 
    $sitemap = new Sitemap; 
    $sitemap->show_links(); 
    } 
} 
?> 

而且在config/routes.php文件你可以这样:

Router::connect('/sitemap.xml', array('controller' => 'site_maps', 'action' => 'show_map')); 

然后,当你访问的网址:

http://mysite/sitemap.xml 

它将路线:

http://mysite/site_maps/show_map 

有关路由的更多信息,请访问:http://book.cakephp.org/view/542/Defining-Routes

祝你好运和快乐编码!

已更新!

+0

@cdburgess ..我不希望这个文件(sitemap.php)与任何cakePHP的语义相关联。我只需要将它放在app/webroot文件夹中,并能够直接从www.domain/sitemap.xml访问它 – TomyLeeJhones 2010-03-09 16:11:07

+0

据我所知,cakePHP不会按照您请求的方式处理路由。这将在Apache中完成。如果您试图以这种方式访问​​文件,Time Lytle似乎有正确的解决方案。 Apache将不得不执行重写规则。 CakePHP应该不在图片中。 – 2010-03-09 16:19:08

+0

我已经在apache中启用了mod_rewrite,并且我已经编码: - 重写规则^/sitemap.xml $ app/webroot/custom_scripts/sitemap.php但它不工作,因为它似乎!我的代码中有任何错误吗? – TomyLeeJhones 2010-03-09 16:19:28