cakephp: absolute links
Probleem met links in e-mails
Recentelijk kwam ik een probleem tegen bij het genereren van links in e-mails die vanuit het administratiegedeelte van een CakePHP-applicatie worden verzonden. Ik gebruikte de link-methode in de HtmlHelper om de links te creëren. De gegenereerde links bevatten een 'admin'-prefix, omdat ze vanuit het admin-gedeelte worden gegenereerd, wat resulteert in dit prefix. Dit is standaard gedrag binnen CakePHP en de routing configuratie.
Het verwijderen van het 'admin'-prefix
Om het 'admin'-prefix te verwijderen, kun je een element aan de tweede parameter (de opties array) van de link-functie toevoegen. Gebruik de sleutel met dezelfde naam als het prefix (in dit geval 'admin') en geef deze de waarde FALSE. Dit vertelt CakePHP om het prefix niet toe te passen op deze specifieke link. Het is aan te raden om ongebruikte prefixen altijd te annuleren bij het maken van links om verwarring te voorkomen.
Waar prefixen gedefinieerd zijn
Deze prefixen zijn gedefinieerd in het bestand app/config/routes.php. Dit bestand bevat de routing-regels voor je applicatie, inclusief de definities voor admin-prefixen. Begrijpen hoe routes werken is cruciaal voor het correct genereren van links.
Voorbeeld: link zonder admin-prefix
Hier is een voorbeeld van hoe je een link kunt genereren zonder het 'admin'-prefix: Html->link('Link', array('controller' => 'contents', 'action' => 'view', 'slug' => 'my-custom-slug', 'admin' => FALSE)); ?>. Door admin => FALSE mee te geven, negeer je de standaard admin-prefix.
Het genereren van absolute links
Om een absolute link te genereren (beginnend met http://tomaszmazur.eu/ in plaats van de standaard /), voeg je een element full_base toe aan de opties array met de waarde TRUE. Dit zorgt ervoor dat de volledige basis-URL wordt gebruikt. Dit is handig voor e-mails en andere scenario's waar relatieve links niet werken.
Voorbeeld: absolute link zonder admin-prefix
Het uiteindelijke voorbeeld van het genereren van een absolute link zonder admin-prefix is: Html->link('Link', array('controller' => 'contents', 'action' => 'view', 'slug' => 'my-custom-slug', 'admin' => FALSE, 'full_base' => TRUE)); ?>. Dit zorgt voor een correcte en volledig functionele link in je e-mail.
