CakePHP 解析 URI 并获取 ID
CakePHP parsing the URI and getting ID
我有一个 SEO URL 喜欢
lieferservice-pizzeria-da-persio-26-offenbach
在我的 bootstrap 文件中,我试图复制这个 URL 并获取其中的商店 ID 26
然后我可以读取数据库来获取商店的信息。什么是最好的方法来做到这一点。不知道。
最佳解决方案
$str = 'lieferservice-pizzeria-da-persio-26-offenbach';
$int = intval(preg_replace('/[^0-9]+/', '', $str), 10);
var_dump($int );
只有return int 26
建议的解决方案只是删除所有非数字,因此您最终只得到数字。如果您可以确保除了字符串之外您的字符串中永远不会有数字,这将起作用。因此,使用 'lieferservice-pizzeria12-da-24-persio-26-offenbach' 这样的字符串,您将得到 122426 而不是您想要的 26。
如果你想确保只接受 -somedigit- 作为 id,你应该使用:
preg_match("/-([0-9]+)-/", $input_line, $output_array);
相反。
这实际上做的很简单:
它只是查找第一个以“-”开头的字符串,后面跟排他!数字并以“-”结尾,而不是 returns $output_array[0] 中的整个字符串(在您的示例中为 -26-)和 $[=22 中的数字(括号内的内容) =][1] 在你的情况下等于 26。
假设您的控制器中有一个函数,我们将其命名为
public function getUrl(){
}
首先想到的是让 CakePhp 接受您传递的 URL 类型(带有特殊字符,如“-”)。在你的路线中你可以有这个:
Router::connect('/getUrl/:id', array('controller' => 'yourControllerName', 'action' => 'getUrl'), array('id' => '[0-9A-Za-z= -]+'));
现在,如果您将 URL 作为
www.domain.com/getUrl/lieferservice-pizzeria-da-persio-26-offenbach
然后回到你的函数
public function getUrl(){
$getValueFromUrl = $this->params['id'];
// Use PHP explode function to get 26 out of $getValueFromUrl
}
这就是路由的用途。您可以对 url 的任何部分进行参数化并在 request.in 中访问它,我认为您想要将某种 slug 与由短划线分隔的 id 结合起来。小菜一碟。
Router::connect('/:slug-:id', array('controller' => 'yourController', 'action' => 'yourAction'), array('id' => '[0-9]+','slug' => '[a-zA-z-]+'));
//inside your action
$id = $this->request->params['id'];
$slug = $this->request->params['slug'];
不需要正则表达式:)
我有一个 SEO URL 喜欢
lieferservice-pizzeria-da-persio-26-offenbach
在我的 bootstrap 文件中,我试图复制这个 URL 并获取其中的商店 ID 26
然后我可以读取数据库来获取商店的信息。什么是最好的方法来做到这一点。不知道。
最佳解决方案
$str = 'lieferservice-pizzeria-da-persio-26-offenbach';
$int = intval(preg_replace('/[^0-9]+/', '', $str), 10);
var_dump($int );
只有return int 26
建议的解决方案只是删除所有非数字,因此您最终只得到数字。如果您可以确保除了字符串之外您的字符串中永远不会有数字,这将起作用。因此,使用 'lieferservice-pizzeria12-da-24-persio-26-offenbach' 这样的字符串,您将得到 122426 而不是您想要的 26。
如果你想确保只接受 -somedigit- 作为 id,你应该使用:
preg_match("/-([0-9]+)-/", $input_line, $output_array);
相反。
这实际上做的很简单:
它只是查找第一个以“-”开头的字符串,后面跟排他!数字并以“-”结尾,而不是 returns $output_array[0] 中的整个字符串(在您的示例中为 -26-)和 $[=22 中的数字(括号内的内容) =][1] 在你的情况下等于 26。
假设您的控制器中有一个函数,我们将其命名为
public function getUrl(){
}
首先想到的是让 CakePhp 接受您传递的 URL 类型(带有特殊字符,如“-”)。在你的路线中你可以有这个:
Router::connect('/getUrl/:id', array('controller' => 'yourControllerName', 'action' => 'getUrl'), array('id' => '[0-9A-Za-z= -]+'));
现在,如果您将 URL 作为
www.domain.com/getUrl/lieferservice-pizzeria-da-persio-26-offenbach
然后回到你的函数
public function getUrl(){
$getValueFromUrl = $this->params['id'];
// Use PHP explode function to get 26 out of $getValueFromUrl
}
这就是路由的用途。您可以对 url 的任何部分进行参数化并在 request.in 中访问它,我认为您想要将某种 slug 与由短划线分隔的 id 结合起来。小菜一碟。
Router::connect('/:slug-:id', array('controller' => 'yourController', 'action' => 'yourAction'), array('id' => '[0-9]+','slug' => '[a-zA-z-]+'));
//inside your action
$id = $this->request->params['id'];
$slug = $this->request->params['slug'];
不需要正则表达式:)