Добавьте косую черту при создании URL-адресов от помощников в CakePHP 3

Я работаю над блогоподобным сайтом в CakePHP 3 и создаю каноническую структуру URL с косой чертой для целей SEO. Для этого в файле маршрутов я построил запросы, соответствующие завершающему слешу, и в webroot .htaccess сделал правильные перенаправления для обработки запросов без завершающего слеша. Кроме того, в AppController Я переопределяю функцию перенаправления для управления перенаправлениями из контроллеров:

function redirect($url, $status = null, $exit = true)
{
$routerUrl = Router::url($url, true);
if(!preg_match('/\.[a-z0-9]{1,5}$/', strtolower($routerUrl)) && substr($routerUrl, -1) != '/') {
$routerUrl .= '/';
}
parent::redirect($routerUrl, $status, $exit);
}

Все идет нормально.

Теперь я хотел бы создавать URL с косой чертой каждый раз, когда создаю их с помощью помощника, например FormHelper или же HtmlHelper, Например:

$this->Form->create(null, [
'url' => ['controller' => 'Messages', 'action' => 'send']
]);

Выходной URL в этом случае будет:

/ сообщения / отправить

И мне нужно, чтобы это было:

/ сообщения / отправить /

В данный момент я жестко программирую URL в опциях Помощника, чтобы он работал (пока не работает). Если я использую опцию примера, при отправке формы она перенаправляет / сообщения / отправить в / сообщения / отправить / из-за .htaccess правила перенаправления и данные POST теряются.

Заранее спасибо, и я прошу прощения за мой плохой английский, я надеюсь, что прояснил себя.

0

Решение

Я бы порекомендовал создать псевдоним для тебя Helper и настроить здание URL.

ЦСИ / View / AppView.php

class AppView extends View
{
public function initialize()
{
$this->loadHelper('Url', [
'className' => 'MyUrl'
]);
}
}

ЦСИ / View / Helper / MyUrlHelper.php

namespace App\View\Helper;

use Cake\View\Helper\UrlHelper;

class MyUrlHelper extends HtmlHelper
{
public function build($url = null, $options = false)
{
// Add your code to override the core UrlHelper build() function

return $url;
}
}

Найти первоисточник UrlHelper Вот.

0

Другие решения

Если вы хотите добавить / в конце действия вы можете попробовать это:

$this->Form->create(null, [
'url' => $this->Url->build('/Messages/send/', true)
]);

Смотрите также

0

По вопросам рекламы [email protected]