首页 > 解决方案 > 如何使用 Laravel/PHP 修改/设置浏览器地址栏中的 URL?

问题描述

目标
根据数据库搜索结果设置/修改浏览器地址栏中的url。

描述
我尝试使用 Laravel开发一个小型多语言 CMS(存储库)。因此,我需要根据用户输入修改地址栏中的 url。例如,用户输入www.example.com/page1并且在 cms 的数据库中找不到此页面/url,我想重定向到www.example.com/404.
其他用例:用户输入www.example.com/contact,找到 url,然后我想在浏览器地址栏中显示 url,如下所示:www.example.com/en/contact.

代码:目前我有一个PageDataGetter类(repo 链接),它搜索数据并返回带有所需数据(或 404 页面数据)的 DTO。然后我收集数据。

页面汇编器

public function assemble(
        PageDataGetterResponseTransfer $pageDataGetterResponseTransfer
    ): PageAssemblerResponseTransfer {

        $pageAssemblerResponseTransfer = new PageAssemblerResponseTransfer();
        
        $pageAssemblerResponseTransfer->setPage(
            response()
                ->view(
                    TemplateInterface::VIEW_PREFIX . $pageDataGetterResponseTransfer->getViewString(),
                    $pageDataGetterResponseTransfer->getPageDataTransfer()->getPageData(),
                    $pageDataGetterResponseTransfer->getStatusCode()
                )
                ->header('Location',  $pageDataGetterResponseTransfer->getUrl())
        );

        return $pageAssemblerResponseTransfer;
    }

在控制器中,我只是尝试像这样返回响应,但它不会更改浏览器地址栏中的 url。

前端控制器

$pageAssemblerResponseTransfer = $pageAssembler->assemble($pageDataGetterResponseTransfer);

return $pageAssemblerResponseTransfer->getPage();

至少我不确定,如果这是正确的方向,我正在努力实现我的目标。
我也尝试通过重定向来解决它,但我不知道如何将字符串传递给视图/刀片,我还需要动态设置状态代码的可能性。

也许有人对我有提示?

标签: phplaravelhttpaddress-bar

解决方案


推荐阅读