PHP5获取所有类别的页面

时间:2013-04-30 10:42:19

标签: php

所以这个问题来自另一个我创建的你可以找到here但是我已经改变了我的代码所以它现在看起来像这样:

汽车控制器

public function indexAction(){

        $category = new Application_Model_CarMapper();
        $gcat = $this->getRequest()->getPathInfo();

        //get id

        $id = $category->find_id_by_name($gcat); 

        $this->view->title = $category->get_sub_cat_select($id);
    }

这是我在mapper中创建的一个新函数:

public function find_id_by_name($name){

        $select = $this->getDbTable()->query("SELECT * FROM car_category WHERE category_name = '{$name}'");
        $result = $select->fetchAll();

        if(!$result) {
            return;
        }   
        return $result[0]['ID'];
    }

我正在通过标题测试它,但它似乎根本没有显示。我希望它显示特定类别的下拉菜单,例如

car-live.local / cars / Volvo ---> “欢迎来到沃尔沃汽车搜索器”

car-live.local / cars / BMW ---> “欢迎来到宝马汽车搜索器”

我知道它不起作用,因为我必须更多地拆分URL,因为现在它通过URL找到id,但我不确定如何做到这一点:s任何你可以解决这个问题的亮点非常感激..谢谢。

[编辑]

新代码:

public function indexAction(){

        $category = new Application_Model_CarMapper();
        $gcat = explode("/", $this->getRequest()->getPathInfo());

        if(isset($gcat['category_name'])) {

        $id = $category->find_id_by_name($gcat); 

        $this->view->title = $category->get_sub_cat_select($id);
        }

    }

1 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解了您的问题,但从代码来看,您似乎遇到了处理该网址的问题。那么,让我们举个例子:

car-live.local/car/Volvo

到达indexAction后,/应该explode

这是返回一个包含网址所有组件的数组,然后你在这种情况下取​​最后一个是Volvo并将其发送到你的find_id_by_name()方法。

我解决这个问题的常用方法是遵循以下内容:

  1. 用斜线爆炸;
  2. 获取第一个(在这种情况下为car并将其“路由”到汽车类,方法是向构造函数发送该请求的其余部分;
  3. 然后car类构造函数接收URL Volvo的下一部分,并将其“路由”为适当的方法,如getVolvo()或您需要的任何内容......
  4. 您可以将其路由到您需要的地方,但只是尝试将处理URL的职责委托给相应的类。例如:

    /cars/whatEverCar =>应由班级car

    处理

    /bike/whatEverBike =>应由班级bike

    处理

    希望这有帮助。


    编辑:

    您的find_id_by_name()方法可以包含以下网址:

    /car/find_id_by_name/Volvo

    我能解释清楚吗?您可以直接使用部分URL并调用方法...并发送其余的URL。


    编辑2:代码示例...

    以下代码是您的问题的一个非常好的解决方案:

    <?php
    // Call this class as soon the site stars
    class Router {
    
        public function __construct() {
            // In some really cool way get your full URL, for example I'm gonna use a string...
            $fullURL = "example.com/Car/findCarById/Volvo";
    
            array_shift($fullURL); // removes "example.com", obvious stuff...
    
            $explodedUrl = explode("/", $fullURL);
    
            $targetClass = $explodedUrl[0]; // Temporary store the target is "Car"
            array_shift($fullURL); // Removes "Car", we don't need it anymore...
    
            $target = new $targetClass($fullURL); // call the Car class responsible for handling all the "Car" related stuff!
        }
    }
    
    class Car {
    
        public function __construct($request) {
            // $request is an array with "findCarById", "Volvo"
            $targetMethod = $request[0]; // Temporary store the target is "findCarById"
            array_shift($request);
            $this->$targetMethod($request);
        }
    
        private function findCarById($parameter) {
            // $parameter is an array with "Volvo"..
            // Now to your query and other cool stuff with $parameter[0];
            print "I'm the method findCarById() of the class Car called by the main router to find the ID for {$parameter}...";
        }
    }
    
    ?>
    

    如果您需要向Car课程添加更多功能,只需添加其他方法,然后使用他的名字通过网址调用它,就像我使用findCarById()一样。

    警告:此代码可能有小错误,它写在记事本上,未经过测试。