在cakephp3中从Helpers构建URL时添加尾随斜杠
我正在使用CakePHP3开发一个类似博客的网站,并为SEO目的创建了带有尾随斜杠的规范URL结构。为了实现这一点,我在routes文件中构建了与尾部斜杠匹配的请求,并在在cakephp3中从Helpers构建URL时添加尾随斜杠,php,cakephp,cakephp-3.0,view-helpers,trailing-slash,Php,Cakephp,Cakephp 3.0,View Helpers,Trailing Slash,我正在使用CakePHP3开发一个类似博客的网站,并为SEO目的创建了带有尾随斜杠的规范URL结构。为了实现这一点,我在routes文件中构建了与尾部斜杠匹配的请求,并在webroot.htaccess中进行了正确的重定向,以处理没有尾部斜杠的请求。此外,在AppControllerI中,我覆盖重定向功能以管理来自控制器的重定向: function redirect($url, $status = null, $exit = true) { $routerUrl = Router::ur
webroot
.htaccess
中进行了正确的重定向,以处理没有尾部斜杠的请求。此外,在AppController
I中,我覆盖重定向功能以管理来自控制器的重定向:
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时都使用一个尾随斜杠来构建URL,比如FormHelper
或HtmlHelper
。例如:
$this->Form->create(null, [
'url' => ['controller' => 'Messages', 'action' => 'send']
]);
本例中的URL输出为:
/信息/发送
我需要的是:
/信息/发送/
目前,我正在帮助器的选项中硬编码URL,以使其工作(尚未投入生产)。如果我使用示例的选项,则在提交表单时,由于.htaccess
重定向规则,表单会重定向/messages/send to/messages/send/,并且POST数据会丢失
提前谢谢,我为我糟糕的英语道歉,我希望我说得清楚。如果您想在操作结束时添加
/
,您可以尝试:
$this->Form->create(null, [
'url' => $this->Url->build('/Messages/send/', true)
]);
另请参见
助手调整URL构建
src/View/AppView.php
class AppView extends View
{
public function initialize()
{
$this->loadHelper('Url', [
'className' => 'MyUrl'
]);
}
}
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;
}
}
src/View/Helper/MyUrlHelper.php
class AppView extends View
{
public function initialize()
{
$this->loadHelper('Url', [
'className' => 'MyUrl'
]);
}
}
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
的原始源代码。我用三个字符解决了它:)
1-open\vendor\cakephp\cakephp\src\View\Helper\UrlHelper.php
2-转到build函数并将“/”添加到返回的$url中,如下所示
它应该看起来像
返回$url.'/'强>
而不是
返回$url强>
我知道这是肮脏的解决方案,不好编辑核心。。。我认为你最好覆盖构建函数
我希望有更好的方法我已经有了这样的URL,但我需要的是使用Controller和Action选项用尾部斜杠来创建URL。['controller'=>'Messages','action'=>'send']我这样做是为了避免在我决定将来更改请求别名时通过此方法跟踪每个URL集,只是不要这样做,无论您使用带或不带尾随斜杠的URL,只要确保你坚持其中一个,谢谢你的建议。也许我没有正确地表达自己。当我说“出于SEO目的”时,我的意思是我想坚持尾部斜杠URL结构,而不是尾部斜杠本身有助于我的SEO。我同意@ndm-但请看@mark谢谢你的建议和参考。在提问之前,我已经找到了该代码。我试着使用它,但它有点麻烦,因为它本打算在CakePHP2.x中使用。事实上,我发现的关于这个“问题”的所有代码和解决方法都是针对CakePHP 2.x的。再次感谢,非常感谢!这正是我所需要的。我不得不对MyUrlHelper.php
进行一些更改,以使其正常工作:我添加了use Cake\Routing\Router
并从UrlHelper
扩展了MyUrlHelper
,而不是从HtmlHelper
扩展。再次感谢!这是一个很好的解决方案。很抱歉,这会破坏图像。。。但我把它放在\vendor\cakephp\cakephp\src\View\Helper\HtmlHelper.php->链接函数。。。它很好用