如何在Kohana中传递“/ home / blah / blah”作为参数

时间:2011-08-23 08:46:43

标签: php kohana kohana-3

我想将参数传递给Kohana中的控制器...
假设以下结构:
class Controller_Configurator extends Controller {
public function action_mytask($param1){}
}

如何通过$ param1发送类似“/ home / blah”的路径?

编辑:我将仅在CLI中运行它。

2 个答案:

答案 0 :(得分:1)

您可以在路由配置中使用overflow参数。然后只需解析控制器中的溢出。这就是我在引导程序中的表现:

Route::set('default', '(<controller>(/<action>(/<overflow>)))', array('overflow' => '.*?'))
    ->defaults(array(
        'controller' => 'widget',
        'action'     => 'index',
    ));

然后我使用这个辅助类来获取特定控制器的参数:

<?php defined('SYSPATH') or die('No direct script access.');

class UrlParam {

    static public function get($controller, $name) {
        $output = $controller->request->param($name);
        if ($output) return $output;

        if (isset($_GET[$name])) return $_GET[$name];

        $overflow = $controller->request->param("overflow");
        if (!$overflow) return null;

        $exploded = explode("/", $overflow);
        for ($i = 0; $i < count($exploded); $i += 2) {
            $n = $exploded[$i];
            if ($n == $name && $i < count($exploded) - 1) return $exploded[$i + 1];
        }

        return null;
    }


    static public function getArray($controller) {
        $overflow = $controller->request->param("overflow");
        if (!$overflow) return array();

        $output = array();
        $exploded = explode("/", $overflow);

        for ($i = 0; $i < count($exploded); $i += 2) {
            $n = $exploded[$i];
            $output[$n] = $exploded[$i + 1];
        }

        return $output;
    }

}

答案 1 :(得分:1)

我最终使用了这个:

class Controller_fun extends Controller { 

  public function action_blah()   
  {  
    $data_folder = CLI::options('data_folder');  
    echo $data_folder['data_folder'];  
  }

} 

当像被叫一样调用时,这就完成了 php index.php --uri="fun/blah" --data_folder=/path/to/wherever

由于我只想在CLI中使用它,因此我可以在研究kohana系统文件中给出的示例后将其作为一个选项:system / kohana / cli.php