Я работаю над блогоподобным сайтом в 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 теряются.
Заранее спасибо, и я прошу прощения за мой плохой английский, я надеюсь, что прояснил себя.
Я бы порекомендовал создать псевдоним для тебя 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
Вот.
Если вы хотите добавить /
в конце действия вы можете попробовать это:
$this->Form->create(null, [
'url' => $this->Url->build('/Messages/send/', true)
]);
Смотрите также