Laravel 路由变化

2023-12-06

我有一个类别表,如下所示:

-- id   -- parent_id             -- name
    1             0              electronics
    2             1              Televisions
    3             2             LCD TVs
    4             2             Plasma Tvs
    5             1              DVD Players
    6             1              Bluray Players
    7             0             Home Appliances
    8             7            Cookers
    9             7            Fridges & Freezers
    10            0            Fashion
    11            10            Mens Clothing
    12            11             Shirts
    13            10            Womens Clothing
    14            13            Skirts

等等 - 我遇到的问题是有些类别只有单一类别,而其他类别可能有 3 或 4 层深。

我有一个列表页面,它将对给定类别中的所有项目进行分页,并将显示该类别的子类别以进一步向下钻取,依此类推,直到到达最后一个子类别。

我有 2 个问题 1 是如何路由它,以便它匹配 /products/{parent Category}/?if_exists child Category/if_exists_child_child/if_exists_child_child_child

下一个在主页上我有特色产品,需要链接到产品页面并包含其完整类别路径product/parent_cat/if_exists_sub_cat/if_exists_sub_sub_cat/if_exists_sub_sub_sub_cat/product_name *我知道如何执行此路由问题是我的主要问题。

或者即使我可以捕获产品/之后的所有内容,然后我也可以将其分解为数组并循环浏览类别,或者找到产品块并显示正确的视图。

提前感谢大家,圣诞快乐:)


我建议您更改 URL,以便它们的一部分用于路由,一部分用于 SEO 目的。这就是我的意思:

/products/view/{product_id}/{category_name}/{category_name}/{etc}/{product_name}
/products/category/{category_id}/{category_name}/{category_name}/{etc}

这样做的优点是您可以忽略类别数量并不总是相同的事实。您的路由仅取决于 URL 的前几段。

Route::get('products/view/{id}/{seo-slug?}', array('as' => 'product', function($id, $seoSlug){
    $product = Product::find($id);
    // ...
}))->where('seo-slug', '.*');

Route::get('products/category/{id}/{seo-slug?}', array('as' => 'category', function($id, $seoSlug){
    $category = Category::find($id);
    // ...
}))->where('seo-slug', '.*');

现在,当涉及到生成链接时,仅使用 Laravel 辅助函数将很难。让我们创建我们自己的。一种方法是向产品和类别模型添加函数。 (您也可以编写一个独立于模型的函数,核心功能保持不变)

Product

public function getUrl(){
    $categoryNames = array('cat1', 'cat2', 'cat3'); // use/create a function on the category model that uses recursion to determine all the categories of the tree
    $seoSlug = implode('/', $categoryNames);
    // ... maybe add other stuff to $seoSlug
    return route('product', array($this->id, $seoSlug));
}

Category

public function getUrl(){
    $categoryNames = array('cat1', 'cat2', 'cat3'); // use the same function as above
    $seoSlug = implode('/', $categoryNames);
    // ... maybe add other stuff to $seoSlug
    return route('category', array($this->id, $seoSlug));
}

重定向“错误”的 URL

如果您愿意,您现在可以重定向具有错误 SEO slug 的 URL。这意味着也可以只输入:

/products/view/183

这也可以用作某种 URL 缩短,用于在电子邮件等中发送链接。

要验证 URL 然后重定向,您只需将当前 URL 与“新”生成的 URL 进行比较即可。像这样:

Route::get('products/view/{id}/{seo-slug?}', array('as' => 'product', function($id, $seoSlug){
    $product = Product::find($id);
    $productUrl = $product->getUrl()
    if(Request::url() !== $productUrl){
        return Redirect::to($productUrl);
    }
    // ...
}))->where('seo-slug', '.*');

Oh and 也祝你圣诞快乐!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel 路由变化 的相关文章

随机推荐

  • phpseclib sftp 使用私钥和密码连接

    无论如何 是否可以使用 phpseclib 或任何其他方法使用私钥和 ftp 密码连接 sftp SFTP 服务器同时使用密码和公钥身份验证的情况很少见 我的猜测是 您最有可能拥有的是受密码保护的私钥 如果是这样 您可以这样登录
  • 如何从 PHAsset 获取图像 URL?是否可以使用 PHAsset URL 将图像保存到文档目录?

    I used NSURL urlA info valueForKey PHImageFileURLKey 但是当我尝试使用 URL 保存图像时 URL 为零 NSData pngData NSData dataWithContentsOfU
  • 正则表达式使用Python正则表达式在文件中查找函数调用?

    我想要一个正则表达式 我将把它与 Python re 模块一起使用 它将在 python 文件中查找 python 函数调用 但我正在查找的函数调用周围会有一些警告 函数调用将有一个特定的名称 函数调用可以是链式的 但只有一个链式调用始终具
  • 传奇中的公共交通延迟响应

    我正在研究在公共交通中使用传奇来协调跨多个服务的活动 传奇的生命周期很短 如果一切顺利的话不到 2 秒 对于我的用例 我想使用请求 响应方法 即客户端请求命令 saga 处理该命令 在接收消息时经历一些状态更改 并最终响应启动 saga 的
  • 添加同一片段的多个实例

    我正在尝试将同一片段的多个实例添加到活动中 示例代码是 FragmentManager fm getSupportFragmentManager Fragment fragment fm findFragmentById R id frag
  • 对象... 是什么意思? [复制]

    这个问题在这里已经有答案了 可能的重复 Java 中的 是什么意思 Java 数组参数 声明 语法 谁能确认我所看到的是否正确Object 下面的方法调用中的参数 public static void setValues PreparedS
  • 使用 opencv 计算虚拟相机的单应性

    我有一个平面图像 我想计算一个图像扭曲 它可以为我提供从位于 3d 空间中另一个点的虚拟相机看到的同一平面的合成视图 因此 给定图像 I1 我想计算代表从虚拟相机看到的图像 I1 的图像 I2 理论上 存在将这两个图像关联起来的单应性 给定
  • 如何使 LinearLayout 可滚动?

    我的屏幕上有很多项目 我需要使用滚动条 以便用户可以向下滚动 但是 滚动条要么不可见 要么不起作用 如何给页面添加滚动条LinearLayout 用 a 包裹线性布局
  • 如何在 Perl 中从 HTML 中提取 URL 和链接文本?

    我之前问过如何在 Groovy 中做到这一点 但是 由于所有 CPAN 库 现在我正在用 Perl 重写我的应用程序 如果页面包含这些链接 a href http www google com Google a a href http ww
  • 如何设置网站图标?

    我正在尝试做一个非常简单的初步练习来建立一个创建网站图标的网站 这是我正在使用的代码 但它不起作用 有人可以帮忙吗 我已将文件 favicon ico 保存在与 html 文件相同的级别 在子目录中 非常感谢 随着 i android wi
  • 什么是 .pid 文件以及它包含什么?

    我最近遇到了一个扩展名为 pid 的文件 并查看了它的内部 但没有找到太多内容 这文档 says Pid 文件是包含进程标识号 pid 的文件 该文件存储在文件系统的明确定义位置 从而允许其他程序找到正在运行的脚本的 pid 任何人都可以对
  • 关于 Objective-C/Cocoa 中工厂方法对象生命周期的问题(保留或不保留...)

    通过阅读 SDK 中的内存管理文档 我发现工厂方法 静态构造函数方法 通常会为我保留该对象并将其添加到自动释放池中 这意味着只要池没有在我预期之前释放 我就不需要保留和释放对象 对于 main 中的默认自动释放池 这应该位于应用程序的末尾
  • 在多个号码字段中搜索多个号码

    ID 1 5 1 6 3 4 1 36 1 我有这些 1 6 36 要搜索的号码 它应该找到包含 1 OR 6 OR 36 的任何行 例如上表中总共 4 行 I tried FIND IN SET ID 1 6 36 ID IN 1 6 3
  • AngularJs 无限循环

    以下index html页面导致无限循环 重现 在 本地或远程 Web 服务器上下载下面链接的 github 项目 我已经在 plunker 上尝试过 并且没有发生无限循环 从您的浏览器请求它 单击页面上的 p1p2 链接 无限循环开始 在
  • MySQL5.6卡在进程“试图启动服务”上

    我获得了适用于 Windows 7 32 位的 MySQL 5 6 社区服务器版本 还下载了相同 Windows 版本的 Windows 安装程序 一切准备都正确 我在博客上看到给我一份在 winodws7 32 位上安装 MySQL 5
  • 如何找到向量的重复元素并输出该重复项的整数外观而不是逻辑值?

    我们知道 duplicate 函数输出一个逻辑向量 然而 我想要的是一个整数向量 如果这是该特定元素第 n 1 次出现 则输出向量的相应元素为 n 例如 如果我们调用我正在寻找的函数 intDuplicate 那么我需要以下输出 gt x
  • 在 C 中从文件中读取长行时处理内存

    首先 我知道这个问题非常接近这个话题 但是这个问题的措辞非常糟糕 我什至不确定它是重复的 而且没有显示代码 所以我认为应该正确地询问它 我正在尝试逐行读取文件 并且我需要将一行特别存储在variable 我已经成功地使用轻松地做到了这一点f
  • android:如何使用模拟(假)坐标修复GPS?

    当 GPS 信号不可用时 我尝试以编程方式修复 GPS 我想这样做是为了向其他应用程序 如谷歌地图和其他应用程序 提供模拟坐标 我尝试使用 GPS PROVIDER 和 NETWORK PROVIDER 但只有后者我才能获得对谷歌地图有效的
  • 错误:无法获取现有工作区:container.Client#ListBlobs:

    Error Failed to get existing workspaces containers Client ListBlobs Failure responding to request StatusCode 403 Origina
  • Laravel 路由变化

    我有一个类别表 如下所示 id parent id name 1 0 electronics 2 1 Televisions 3 2 LCD TVs 4 2 Plasma Tvs 5 1 DVD Players 6 1 Bluray Pla