2012-06-19 7 views
5

Próbuję wysłać wiadomość e-mail z CakePHP 2.1.2 przez powłokę konsoli (ewentualnie przez zadanie cron). Widok, który wysyłam, to kalendarz z odsyłaczami do strony internetowej aplikacji. Problem, który znajduję, polega na tym, że adresy URL nie zawierają poprawnej ścieżki, a z tego, co przeczytałem, wynika, że ​​nie ma obiektu żądania, ponieważ używam konsoli. Na przykład, jeśli utworzyć widok w przeglądarce dostaję linki tak:Tworzenie pełnego adresu URL z CakePHP 2.1.2 Powłoka konsoli

http://localhost/ReportMonitor/scheduledReports/index/show_date:2012-06-10/result:GOOD 

ale w e-mailu z użyciem tego samego kodu otrzymuję to:

http://localhost/scheduledReports/index/show_date:2012-06-10/result:GOOD 

który jest blisko, ale nie cygaro .

Próbowałem znaleźć globalny, że mogę ustawić gdzieś tylko twardy kod podkatalogu aplikacji, ale nie znalazłem niczego, co działa jeszcze. Linki są wykonane za pomocą kodu tak:

$newUrl = array(); 
$newUrl['controller'] = 'scheduledReports'; 
$newUrl['action'] = 'index'; 
$newUrl['url'] = array(); 

foreach ($data as $key => $value) { 
    $newUrl['show_date'] = "$year-$month-$key"; 
    $newUrl['result'] = 'GOOD'; 
    $data[$key]['num_complete'] = $this->Html->link(__('Complete: ') . $value['num_complete'], Router::reverse($newUrl, true), array('class' => 'green')); 

bym, że to jest wspólny funkcji (wysyłanie prawidłowych adresów URL w konsoli wygenerowany e-mail), ale po prostu nie mogę zrozumieć.

Dzięki

Odpowiedz

3

Użyj opcji full_base w linkach

echo $this->Html->link(array(
    'controller' => 'posts', 'action' => 'index', 'full_base' => true 
)); 

i ustawić FULL_BASE_URL stała w bootstrap.php do bazy URL:

define('FULL_BASE_URL', 'http://www.domain.com/subdir'); 

Jeśli używasz trasy dla Twojego musisz podać trasę w swojej powłoce:

App::uses('Router', 'Routing'); 
config('routes'); 
+1

Może to być pomocne http://stackoverflow.com/a/13660262/1868660 –