<rmcreative>

RSS

Yii, ссылка на текущую страницу с дополнительным параметром

1 октября 2012

Необходимо сослаться ровно на ту же страницу, на которой находимся, но добавить GET-параметр. Например, к http://example.org/post/view/1?x=120&y=321 добавить extra=1.

В view или контроллере Yii это можно сделать так:

$args = $_GET;
$args['extra'] = 1;
echo $this->createUrl('', $args);

или покороче

echo $this->createUrl('', array('extra' => 1) + $_GET);

Комментарии RSS

  1. №6768
    AmdY
    AmdY 01 окт. 2012 г., 18:46:29

    Внутри что-то вроде http_build_query(array_merge($_GET, $params))?

  2. №6770
    Sam
    Sam 01 окт. 2012 г., 19:07:12

    Нет. Внутри роутер Yii.

  3. №6771
    Костя
    Костя 01 окт. 2012 г., 19:11:33

    собственно говоря не понял, а зачем это публиковать) просто разжижить блог постами? или я просто чего-то не понял, хочу пояснения))

  4. №6773
    Богдан
    Богдан 01 окт. 2012 г., 19:37:54

    Не понял зачем было использовать именно CHtml::link для показа примера. Ведь суть в добавлении параметра, а не генерации ссылки. Лучше было бы использовать просто $this->createUrl($this->route, CMap::mergeArray($_GET, $newParams)) где $newParams массив параметров которые мы хотим добавить/заменить

  5. №6775
    Skiller
    Skiller 01 окт. 2012 г., 20:53:17

    Костя, Богдан это просто пример навеяный ответом Qiang в одном из issue на гитхабе насколько я понял :)

  6. №6776
    Sam
    Sam 01 окт. 2012 г., 21:19:55

    Богдан, убрал CHtml. Действительно в примере не особо нужен.

    Костя, захотелось :)

  7. №6777
    Дмитрий
    Дмитрий 01 окт. 2012 г., 21:54:15

    offtop: в заголовке поста опечатка...

  8. №6778
    mihdan
    mihdan 01 окт. 2012 г., 23:01:00

    Заголовок поста поправьте :-)

  9. №6779
    Максим
    Максим 01 окт. 2012 г., 23:02:24

    А не проще так:

    CHtml::link('',array('')+$_GET+array('extra'=>1));

    ??

  10. №6780
    Sam
    Sam 02 окт. 2012 г., 0:05:49

    Тогда уж

    echo $this->createUrl('', array('extra' => 1) + $_GET);
  11. №6781
    Алексей
    Алексей 02 окт. 2012 г., 0:08:08

    Кончайте складывать массивы! Я понимаю что вы это можете. Но это ужасно. Посмотрите видео: www.destroyallsoftware.com/talks/wat

  12. №6782
    Sam
    Sam 02 окт. 2012 г., 0:14:20

    Алексей, офигительно! :)

  13. №6783
    Алексей
    Алексей 02 окт. 2012 г., 0:14:24

    Недавно понадобилось заменить массивы на объект имплементирующий ArrayAccess, и я даже не хочу знать что будет при сложении ArrayAccess и массива.

  14. №6784
    endo
    endo 02 окт. 2012 г., 1:03:44

    Документация по оераторам массива: us3.php.net/manual/en/language.operators.array.php

  15. №6785
    Алексей
    Алексей 02 окт. 2012 г., 10:41:50

    Да-да, я в курсе что вы это можете :-) Просто это плохая практика.

  16. №6787
    Creocoder
    Creocoder 02 окт. 2012 г., 18:18:34

    Это с каких пор это стало плохой практикой? Если в php нет возможности перегрузить оператор сложения, то это проблема php. В ruby такая возможность есть.

  17. №6789
    Алексей
    Алексей 03 окт. 2012 г., 1:12:26

    То что задача имеет решение, еще не повод ее решать.

  18. №6878
    Дмитрий
    Дмитрий 21 окт. 2012 г., 19:56:48

    Решение не подходит для корня сайта, если urlManager использует режим urlFormat = path. :(

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.