首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在MVC类页面中基于漂亮的URL加载类?

如何在MVC类页面中基于漂亮的URL加载类?
EN

Stack Overflow用户
提问于 2013-09-10 19:21:36
回答 1查看 6.3K关注 0票数 6

我想问一些关于如何解决这个问题的建议。我正在尝试建立我自己的MVC网站。我学习了URL的基础知识。

代码语言:javascript
运行
复制
http://example.com/blog/cosplay/cosplayer-expo-today

blog ->控制器

控制器中的->方法

今天的->variable在方法上

如果我在我的博客控制器中动态扩展这个类别呢?我是否需要创建该方法,或者是否有一些技巧可以自动完成?我是说..。我现在有这些类别:角色扮演,游戏,电影,系列。所以我需要在控制器中创建这些方法,但是它们都是这样做的,即从数据库中选择其他类别。

  • 函数cosplay() = example.com/blog/cosplay/
  • 函数游戏()= example.com/blog/game/
  • 函数blog()=example.com/blog/育婴/电影
  • function ()= example.com/blog/series/

有什么好的建议,我如何可以写我的控制器自动完成这一点?我的意思是,如果我上传一个新的类别在我的数据库,但我不想修改控制器。有可能吗?谢谢你的帮助!

更新

这是我的URL开发者类

代码语言:javascript
运行
复制
class Autoload
{
    var $url;
    var $controller;
    function __construct()
    {
        $this->url = $_GET['url'];
        //HNEM ÜRES AZ URL
        if($this->url!='' && !empty($this->url))
        {
            require 'application/config/routes.php';
            //URL VIZSGÁLATA
            $this->rewrite_url($this->url);

            //URL SZÉTBONTÁSA
            $this->url = explode('/', $this->url);

            $file = 'application/controllers/'.$this->url[0].'.php';
            //LÉTEZIK A CONTROLLER?
            if(file_exists($file))
            {
                require $file;
                $this->controller = new $this->url[0];

                //KÉRELEM ALATT VAN AZ ALOLDAL?
                if(isset($this->url[1]))
                {
                    //LÉTEZIK A METÓDUS? ENGEDÉLYEZVE VAN?
                    if(method_exists($this->controller, $this->url[1]) && in_array($this->url[1], $route[$this->url[0]]))
                    {
                        if(isset($this->url[2]))
                        {
                            $this->controller->{$this->url[1]}($this->url[2]);
                        }
                        else
                        {
                            $this->controller->{$this->url[1]}();
                        }
                    }
                    else
                    {
                        header('location:'.SITE.$this->url[0]);
                        die();
                    }
                }
            }
            else
            {
                header('location:'.SITE);
                die();
            }
        }
        else
        {
            header('location:'.SITE.'blog');
            die();
        }
    }

    /**
     * Első lépésben megvizsgáljuk, hogy a kapott szöveg tartalmaz-e nagybetűt. Amennyiben igen átalakítjuk kisbetűsre.<br/>
     * Második lépésben megnézzük, hogy a kapott szöveg '/'-re végződik-e. Amennyiben igen levágjuk azt.<br/>
     * Harmadik lépésben újra töltjük az oldalt a formázott szöveggel.
     * 
     * @param string $url Korábban beolvasott URL.
     */
    private function rewrite_url($url)
    {
        //HA NAGYBETŰ VAN AZ URL-BEN VAGY '/'-RE VÉGZŐDIK
        if(preg_match('/[A-Z]/', $url) || substr($url, -1)=='/')
        {
            //NAGYBETŰS AZ URL KICSIRE ALAKÍTJUK
            if(preg_match('/[A-Z]/', $url))
            {
                $url = strtolower($url);
            }
            //HA '/'-RE VÉGZŐDIK LEVÁGJUK
            if(substr($url, -1)=='/')
            {
                $url = substr($url, 0, strlen($url)-1);
            }
            header('location:'.SITE.$url);
            die();
        }
    }




}

这是我的.htacces

代码语言:javascript
运行
复制
Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d  
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
EN

Stack Overflow用户

发布于 2013-09-10 19:33:35

我觉得你想的太多了.

因此控制器/资源是一个所有的控制器/资源都应该运行的blog....the方法(使用crud.我通常称它为数据,但基本上是您选择的)。现在让您的方法接受一个基于url的自动映射的类别值.

这里有一个未经测试的sample...completely,但只是为了向您展示这个想法(使用pdo)。

代码语言:javascript
运行
复制
public function data($id = 0, $category = 0){
    if (isset($id) AND $id != 0){
         $bind = array(":id", $id);
         $results = $db->query("SELECT * FROM blog WHERE blog_id = :id", $bind);
         return $results[0];
    } else if (isset($category) AND $id != 0){ 
         $approved_categories = array("cosplay","game","movie","series");
         if (in_array($category, $approved_categories)){
              $bind = array(":cat", $category);
              $results = $db->query("SELECT * FROM blog WHERE blog_cat = :cat", $bind);
         } 
         return $results;
    }
}
票数 -3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18727186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档