как передать "/ home / blah / blah" в качестве параметра в Kohana - PullRequest
1 голос
/ 23 августа 2011

Я хотел бы передать параметр контроллеру в Кохане ...
Предположим, что следующая структура:
class Controller_Configurator extends Controller {<br> public function action_mytask($param1){}<br> }

Как я отправлю путь типа "/ home / blah"через $ param1?

Редактировать: я собираюсь запустить это только в CLI.

Ответы [ 2 ]

1 голос
/ 23 августа 2011

Я закончил тем, что использовал это:

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

1 голос
/ 23 августа 2011

Вы можете использовать параметр переполнения в вашей конфигурации маршрутизации. Затем просто проанализируйте переполнение в вашем контроллере. Вот как я делаю это в моей начальной загрузке:

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;
    }

}
...