2010-03-09 34 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