2010-03-09 6 views
3

메신저 CakePHP에서 일하고 있습니다. 내가 그걸로 연결된 모든 컨트롤러가 나던 아닌 cakephp 파일에 대한 경로를 정의 할 수있는 방법을 알고 싶습니다?CakePHP - 어떻게 그와 연결된 컨트롤러가없는 non-cakephp 파일에 대한 경로를 정의 할 수 있습니까?

편의를 위해이 파일 (sitemap.php)을 webroot 폴더에 넣었습니다. 이제 어떻게 든 그것에 연결해야합니다!

+0

원하는 경로 종류의 예를 들려 줄 수 있습니까? '/ folder/subfolder/sitemap.php'을 그 스크립트에 맵핑하고 싶습니까?'.php'를 제거하고'/folder/subfolder/siteemap'을 사용 하시겠습니까? '/ folder/subfolder/sitemap/arg0/arg1/arg2 /'와 같이 url/path에있는 항목을 인수로 사용 하시겠습니까? 어떤 경우이든 htaccess 파일을 조사해야합니다. 나는 그 대답이 CakePHP가 아닌 서버 설정에 있다고 생각합니다. –

+0

나는 sitemap.xml을 .htaccess 파일로 sitemap.php로 대체 할 수있었습니다. 하지만 거기에 연결된 컨트롤러가 없습니다 routes.php 경로를 정의하는 방법을 잘 모릅니다. www.domain/sitemap.xml을 호출하면 documentRoot/app/webroot/sitemap.php에서 파일을 가져와야합니다. 이것이 내 필요입니다! 아니요, 어떤 인수도 전달하고 싶지 않습니다. – TomyLeeJhones

답변

1

실제로 사용하지 않는다면 전체 CakePHP 프로세스를 건너 뜁니다. .htaccess가 지나치게 욕심 (* 존재하는 파일 *에 대한 요청을 다시 작성)하지 않으면 않는 한 sitemap.php에 직접 액세스 할 수 있어야합니다. 그렇지 않으면 .htaccess 파일을 업데이트하여 기존 파일을 다시 쓰지 마십시오.

외부 서비스가 파일을`sitemap.xml '로 필요로한다면 CakePHP에서 재 작성을 시도하지 말고 .htaccess 파일로 다시 작성하십시오.).

결론 : 사용하지 않는 한 다시 쓰지 말고, 심지어 사용하지 않는 경우 CakePHP로 다시 작성하지 마십시오.

+0

좋아, 나는 DocumentRoot를 발견 htaccess로 파일에서이 같은 대구 뭔가 관리했습니다 : 한다 RewriteRule ^/sitemap.xml의 $ 응용 프로그램/웹 루트/custom_scripts/sitemap.php 그러나 그것이 작동하지, 그것은 보인다을! – TomyLeeJhones

+0

위트 홀 존경심, 왜 단순히 케이크를 사용하여 이것을 할 수있을 때 구성이 복잡합니까? cake를 통해 경로를 지정할 필요가 없다면, webroot에 넣는 것은 아파치에서 다시 쓰기가 가능하고 cakephp 인스턴스가 .htaccess 파일을 사용하여 실행되는 한 똑같이 작동합니다. 그냥 webroot 디렉토리에 php 파일을 넣고 URL : http : //mysite/sitemap.php 아파치가 재 작성 가능하고 cakephp 인스턴스가를 사용하고있는 한 ... 다시 작동합니다. htaccess 파일이 함께 제공됩니다. –

+0

게시 된대로 더 많은 정보를 읽은 후에는 지정된 필요에 맞는 올바른 해결책 인 것 같습니다. +1 –

2

sitemap.php의 기능을 cakephp 응용 프로그램에서 사용할 수 있기를 원하는 것처럼 들립니다. 이것을 cakephp에 포함시키는 방법은 그것을 공급 업체로 설정하는 것입니다. 다음 단계를 따르십시오.

1 파일을 app/vendor 폴더에 저장하십시오. 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(); 
    } 
} 
?> 

그리고 설정에서

/추가 할 routes.php :

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

, 당신은 URL을 방문 할 때 :

http://mysite/sitemap.xml 

그것은 것이다 운항합니다 :

http://mysite/site_maps/show_map 

라우팅에 대한 자세한 내용은, 당신은 방문 할 수 있습니다 : http://book.cakephp.org/view/542/Defining-Routes

행운을 빕니다 및 코딩 해피!

업데이트 됨!

+0

@cdburgess .. 나는이 파일 (sitemap.php)을 cakePHP의 의미와 연관시키지 않기를 바란다. 난 그냥 응용 프로그램/webroot 폴더 안에 넣고 www.domain/sitemap.xml에서 직접 액세스 할 수 있어야합니다. – TomyLeeJhones

+0

제 지식에 따라 cakePHP는 요청하는 방식대로 라우팅을 처리하지 않습니다. 이것은 Apache에서 수행되어야합니다. 그런 방식으로 파일에 액세스하려고 시도하는 경우 Time Lytle이 올바른 해결책을 갖는 것으로 보입니다. 아파치는 재 작성 규칙을 수행해야한다. CakePHP는 그림에서 빠져 나가야합니다. –

+0

아파치에서 mod_rewrite를 사용할 수 있도록 코딩했습니다 : - RewriteRule ^/sitemap.xml $ app/webroot/custom_scripts/sitemap.php하지만 작동하지 않습니다. 내 코드에 실수가 있습니까? – TomyLeeJhones

관련 문제