比较网址模型和真实模型



我有这个网址类型: /segment1/segment2

我需要专注于包含项目的 id 或代码以及其他一些 slug 或日期等信息的 segment2。

例:
/segment1/123-title-of-the-item/segment1/title-of-the-item-123
/segment1/DLCK34Z-other-text

等等..

让我们考虑第一个示例:

该模型/segment1/{id}-{slug}

为了从数据库中获取项目,我需要从"123-标题项目"中识别id。

我需要得到一个数组,如下所示:

['id'] => 123
['slug'] => title-of-the-item

换句话说,在任何情况下,我都需要知道 url 的哪个子字符串对应于 patner 元素。

{} 之间的所有字段都是数据库表上的字段,我已经知道项目的表名。

你有什么脚本、类、函数或建议吗?

朴素实现:

<?php
$url = '/segment1/x-title-of-the-item-123';
// Get the last segment / part
$urlParts = explode('/', $url);
$lastPart = end($urlParts);
// Get ID and slug
$candidates = explode('-', $lastPart);
if ($object = findObjectById(current($candidates))) {
    echo 'ID is at the beginning';
} else if ($object = findObjectById(array_pop($candidates))) {
    echo 'ID is at the end';
} else {
    // No valid ID anywhere
    throw new Exception('Database record not found');
}
// This is a dummy function, replace it with your own implementation
// that tries to find the database recod by the id. 
// Attention: ID can be a string or a bool (false).
function findObjectById($id)
{
    // Return the database record if it exists or null/false if not
    // Attention: Won't work with the code above if 0 is a valid result!
    return ((int) $id > 0);
}

但是,我很确定其他人会想出更好的主意。

更新:好的,如果DLCK34Z不是ID,那么我的尝试不适用于这种情况。你当然可以用"findObjectByCode"方法扩展它,但事情会变得混乱。

相关内容

  • 没有找到相关文章

最新更新