在CakePHP 3中从Helpers构建URL时添加尾部斜杠

sf6xfgos  于 2022-11-24  发布在  PHP
关注(0)|答案(3)|浏览(156)

我正在用CakePHP 3开发一个类似于博客的网站,并为SEO的目的创建了带有一个尾部斜杠的规范URL结构。为了实现这一点,我在routes文件中创建了与尾部斜杠匹配的请求,并在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);
}

到目前为止,一切顺利。
现在,我希望在每次使用Helper构建URL时,都使用一个尾随斜杠,比如FormHelperHtmlHelper。例如:

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

这种情况下的URL输出为:

/消息/发送

而我需要的是:

/消息/发送/

目前我正在Helper的选项中硬编码URL以使其工作(尚未投入生产)。如果我使用示例的选项,当提交表单时,它会将**/messages/send重定向到/messages/send/**,因为.htaccess重定向规则和POST数据丢失。
提前谢谢你,我为我糟糕的英语道歉,我希望我说的很清楚。

68bkxrlz

68bkxrlz1#

我建议为您的Helper创建一个别名,并调整URL构建。

源代码/视图/应用程序视图.php

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

源代码/视图/帮助程序/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的原始源代码。

fnatzsnv

fnatzsnv2#

如果你想在动作的末尾添加一个/,你可以试试:

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

另请参阅

  • 设置表单的URL
  • 生成URL
ndasle7k

ndasle7k3#

我用三个字符解决了它:)...
1-打开\vendor\cakephp\cakephp\src\View\Helper\UrlHelper.php 2-转到构建函数并将.“/”添加到返回的$url,如下所示
它看起来应该像return $url.“/”;
而不是返回$url;
我知道这是肮脏的解决方案,不好编辑核心...我认为你最好覆盖构建函数...
我希望有更好的办法

相关问题