CakePHP, GET Параметры и маршрутизация - PullRequest
7 голосов
/ 18 декабря 2010

Я довольно новичок в CakePHP, но у меня есть вопрос, касающийся URL и параметров. Я хотел бы иметь URL, который выглядит как стандартный URL, например:

http://www.mysite.com/controller/myaction?arg=value&arg2=val

Я бы хотел, чтобы этот URL отображался на действие в моем контроллере следующим образом:

function myaction($arg = null, $arg2 = null)
{
   // do work
}

Я понимаю, что у CakePHP есть маршрутизация, как описано здесь , однако, если честно, это кажется чрезмерным и приводит к нестандартной строке URL.

В моей текущей ситуации URL генерируется и вызывается внешней (биллинговой) системой, которая ничего не знает о торте и не поддерживает формат URL-адреса торта.

Ответы [ 3 ]

11 голосов
/ 18 декабря 2010

Ваш URL может быть в любой форме.Просто CakePHP позволяет извлечь переменную, переданную через GET, из переменной $this->params['url']

function myaction()
{
  if(isset($this->params['url']['arg'])) 
    $arg = $this->params['url']['arg'];
  if(isset($this->params['url']['arg2']))
    $arg2 = $this->params['url']['arg2'];
}
1 голос
/ 02 марта 2015

Решение в AppController для CakePHP 2.x

class AppController extends Controller {

....

/***
     * Recupera los Named envias por URL
     * si es null $key emtraga el array completo de named
     *
     * @param String $key
     *
     * @return mixed
     */
    protected function getNamed($key=null){
        // Is null..?
        if(is_string($key)==true){
            // get key in array
            return Hash::get($this->request->param('named'), $key);
        }else{
            // all key in array
            return $this->request->param('named');
        }
    }
...
}
0 голосов
/ 23 сентября 2012

У меня похожая проблема.Не потому, что у меня есть внешняя система, а потому, что я не люблю помещать все параметры в URL-путь.В моем примере у меня есть несколько поисковых запросов, которые собираются и передаются в контроллер.ИМХО, эти запросы должны быть параметрами GET, а не частью URL-пути.

Одним из преимуществ использования параметров GET является то, что порядок заданных параметров не важен, в отличие от передачи параметров через путь URL.,

Чтобы решить эту проблему общим способом, я заменяю все аргументы метода значением GET-параметра, если дан один с тем же именем:

class MyController extends AppController 
{
    function test($var1 = null, $var2 = "content2")
    {
        foreach (get_defined_vars() as $key => $value) {
            if (isset($this->params['url'][$key])) {
                $getvalue = $this->params['url'][$key];
                $$key = $getvalue;
                CakeLog::write("debug", "Setting:$key to $getvalue");
            }
        }
        CakeLog::write("debug", print_r(get_defined_vars(), true));
    }
}

СейчасЯ могу получить доступ к этому методу контроллера и передать параметры через GET следующим образом:

http://myapp/mycontroller/test?var1=foo&var2=bar
...