如何创建URL&阅读Codeigniter?

时间:2015-08-02 06:53:58

标签: php codeigniter codeigniter-2 codeigniter-routing

如何在 Codeigniter 中创建动态网址。

我按照存储基本文章详情:

 1. ID
 2. Article Title
 3. Content
 4. Tags
 5. Status
 6. Create Time
 7. Update Time
 8. Author ID
 9. Status

现在我想知道如何创建动态网址,其中包含Page ID& Article Title

例如http://www.domain.com/1/hello-codeigniter

现在上面的示例网址,我生成的网址为ID& Article Title

  1. 检索文章内容的ID(当用户点击文章时,从ID获取内容)。
  2. 安全网址的文章标题。
  3. 但我不想在网址上显示ID,并且在用户重定向到详细信息页面时仍然可以获取内容。

    这是我的代码:

    查看: home_page.php

    <div id="body">
            <?php for($i=0; $i<count($blogPosts); $i++): ?>
                <div class="post-preview">
                    <?php
                        $postID = $blogPosts[$i]->id; // Get post ID
                        $postTitle = $blogPosts[$i]->title; // Get post Title
                        $urlTitle = preg_replace('/\s+/', '-', $postTitle); // Replacing space with dash
                        echo anchor('content/'.$postID.'/'.$urlTitle, $postTitle, array('title' => $postTitle)); // Get post URL
                        echo "<br />";
                    ?>
                </div>
                <hr>
            <?php endfor; ?>
        </div>
    

    控制器: home.php

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    class Home extends CI_Controller {
    
        public function index() {
    
            $this->load->model("HomeModel"); // Load HomeModel
            $data['blogPosts'] = $this->HomeModel->blogPosts(); // Get blog posts data from blogPostsData function
            $this->load->view("home_page", $data);
    
        }
    
    }
    

    型号: HomeModel.php

    class HomeModel extends CI_Model {
    
        public function blogPosts() {
    
            $this->db->select('*');
            $this->db->from('blog_posts');
            $query = $this->db->get();
            return $query->result();
    
        }
    
    }
    

    编码后当我将鼠标悬停在锚链接时,我收到了这个网址:

    http://localhost/codeIgniter/index.php/content/1/My-First-Blog-Post!
    

    如何隐藏index.phpcontent&amp;来自网址的1

    还有一件事是,当我点击链接时,我收到此错误消息:

    An Error Was Encountered 
    The URI you submitted has disallowed characters.
    

    任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:0)

如果您将slug(安全网址的文章标题)存储在数据库中,则根本不需要公开ID。这会涉及到您的表中添加一列。

您可以使用详细here url_title() select count(*) from table1, table2 where table1.id = table2.id 自动创建文章时的段塞生成。

答案 1 :(得分:0)

<a href="<?php echo base_url()?>index.php/controller_name/method_name/<?php echo $item['name'] ?>/<?php echo $item['id'] ?>" alt="">click here to view</a>

因此,您的网址如 www.example.com/index.php/controller_name/method/book_name/book id

在控制器

function method_name($name, $id)
{
    echo $name;// this contain book name 
    echo $id;// this contain book id

    //Simply you can use this to get all data
    $result = $this->Model_name->get_book_details($id);//in model $id hold the id of book
}

答案 2 :(得分:0)

您可以将routes用于此目的

使用以下代码

删除index.php使用.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

并在config.php

$config['uri_protocol'] = 'AUTO';

从网址中删除内容从屏幕视野

中移除内容
echo anchor($postID.'/'.$urlTitle, $postTitle, array('title' => $postTitle)); // Get post URL

我不这么认为你应该从网址中删除1。如果您从网址中删除它,那么如何识别您的帖子。所以将它保存在url中会很好。或者如果你想删除,那么在帖子标题的末尾添加这个id,如

http://localhost/codeIgniter/My-First-Blog-Post!-1

并展开post 的最后一个元素

An Error Was Encountered 
The URI you submitted has disallowed characters.

您收到此错误,因为在您的网址中添加了!。要使您的应用程序安全,CI会阻止来自网址的特殊字符。因此,除了_-之外,最好不要在网址中使用特殊字符。

在您的控制器上

class Content extends CI_Controller {
    function index($id, $name)
    {
        echo $name;// this contain book name 
        echo $id;// this contain book id

        //your code
    }
}

现在在您的路线application/config/routes.php

$route['(:num)/(:any)']='content/index/$1/$2';