CodeIgniter URL更改

时间:2014-01-01 09:12:12

标签: codeigniter

我正在使用CodeIgniter开发一个应用程序。在这种情况下,当我点击View的锚标签时,我希望获得www.something.com/book/bookname之类的网址。我不希望获得类似www.something.com/book/bookname/12的网址。另一方面,我必须将书ID从View传递给Controller。

有谁能说我该怎么做?

由于

@Allendar

我没有表达。为此。我们有一个场景。我的View中有一系列图书。如下所示

Sl no书名价格

  1. php book $ 10
  2. MySql book $ 15
  3. html book $ 20
  4. css book $ 12
  5. 现在我想看一本书的细节。在这种情况下,我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这样的网址。

    我想现在你很清楚。

    谢谢

2 个答案:

答案 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)

希望这有帮助!