【问题标题】:Codeigniter: How to display a URL of a controller inside a controller (as a sub-url)Codeigniter:如何在控制器内显示控制器的 URL(作为子 URL)
【发布时间】:2015-11-09 08:59:03
【问题描述】:

我想在另一个中使用控制器函数名称,这样它看起来就像是一个子 URL。我该怎么做呢?

例子:

class Food extends CI_Controller {


public function Fruits(){
}

public function apples(){
}

public function bananas(){
}

}

目前如果我想调用bananas()函数,url会是这样的:

example.com/food/bananasa

我希望它看起来像这样:

example.com/food/fruits/bananas

example.com/food/fruits/apples

【问题讨论】:

  • 把食物做成文件夹,把水果做成控制器,放到食物文件夹里
  • 哦,这可能吗?然后我可以将控制器称为food/fruits/apples ?
  • 如果这是一个选项,我认为这是最有条理的方式:O
  • 是的,你可以制作控制器的文件夹,url变成site.com/<Folder Name>/<Controller>/<Method>/<Method Arg1>/<Method Arg2>/<Metho....
  • 或者你可以通过创建_remap方法的过程

标签: php codeigniter url


【解决方案1】:

routes.php

$route['food/fruits/bananas'] = 'food/bananasa';
$route['food/fruits/apples'] = 'food/apples';

像这样添加

【讨论】:

    【解决方案2】:

    您可以创建 $route 定义,如 @Abdulla 所述,或者您可以重组您的控制器文件夹来更改:

    controllers
      -> food.php
      -> animals.php
    

    到这里:

    controllers
      -> food
         -> fruits.php
         -> vegetables.php
      -> animals
         -> pets.php
         -> wild.php
    

    这样做会将您的网址变成site.com/<Folder Name>/<Controller>/<Method>

    【讨论】:

    • 当然可以,很高兴我能帮上忙!
    【解决方案3】:

    如果您有永久结构, 重新映射功能应该适合您更改代码。

    public function _remap($method)
    {
        if ($method == 'some_method')
         {
            $this->$method();
        }
        else
        {
            $this->default_method();
        }
    }
    

    参考:https://codeigniter.com/userguide3/general/controllers.html?highlight=remap#remapping-method-calls

    另外:你可以使用父类使其成为构造函数然后调用

    parent::__construct();
    

    在你的课堂上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多