我正在使用CodeIgniter开发一个应用程序。在这种情况下,当我点击View的锚标签时,我希望获得www.something.com/book/bookname
之类的网址。我不希望获得类似www.something.com/book/bookname/12
的网址。另一方面,我必须将书ID从View传递给Controller。
有谁能说我该怎么做?
由于
@Allendar
我没有表达。为此。我们有一个场景。我的View
中有一系列图书。如下所示
Sl no书名价格
现在我想看一本书的细节。在这种情况下,我hiperlinked书名,书名在锚标签内。如果我点击图书名称,我会获得www.something.com/book/get_book/12
这样的网址。如果book是Controller
的名称,则get_book是Controller
内的函数,12是book id。然后我可以使用数据库中的id 12获取一本书的详细信息。这是几乎所有应用程序中常见的secenerio。
但我需要一个特殊的网址,即www.something.com/book/get_book/php book
。但是我希望在Controller
中获取该书的ID,以便在数据库中找到该书(because id of the book is UNIQUE,but name of the book is not UNIQUE
)。即使我不想获得像www.something.com/book/get_book/php book/12
这样的网址。
我想现在你很清楚。
谢谢
答案 0 :(得分:1)
如果你想要一个漂亮的URL,你可以使用slugs。在数据库中创建新书时,有几个简单的步骤,
1。)PHP(为新书生成Slugs)
$book = new StdClass;
$book->name = $some_post_value['name'];
$book->slug = preg_replace('/[^a-zA-Z0-9_]/', '_', $book->name); // You should decide your own rules and check if there are no illegal URL-characters in your book-name
2.)SQL(检查slug是否已被使用)
sprintf('SELECT * FROM books WHERE slug = "%s"', $book->slug);
如果上述查询的结果为 1 ,则表示已经取出了slug。您需要在slug中添加或更改某些内容并再次检查相同的查询,直到slug绝对唯一。
当slug最终是唯一的时候,您可以将Book-data插入数据库并使用您的控制器,以便最终通过它的slug(名称)检索您的Book:
class Book extends FrontendController {
public function bookname($slug = FALSE) {
if ($slug) {
// Assuming DataMapper here, for easy examples
$book = new Book();
$book->get_where(array('slug' => $slug));
if ($book->exists()) {
// Process and load your view with the Book-data
}
else{
// Book not found by Slug
}
}
}
}
在数据库的UNIQUE
- 字段上使用slug
将来会让您免除很多麻烦,因为否则表中可能会有冲突的slug-names。
网址看起来像; http://www.yourwebsite.com/book/bookname/The_Lord_of_the_Rings_Return_of_the_King
答案 1 :(得分:0)
您需要在数据库表中使用“slug”列,以便您可以匹配该列。但是因为它不是唯一的,你还需要ID(正如你正确指出的那样)。
所以将网址设置为:
book/get_book/php-book/12
并将两个参数传递给控制器方法
get_book($slug, $id)
希望这有帮助!