передающие переменные в mvc шаблоне

Вы действительно можете редактировать свой код прямо на GitHub. Таким образом, ответ прост, откройте github, затем откройте файл, который вы хотите отредактировать, и нажмите «Изменить» (вверху справа). Сделайте ваши изменения, затем нажмите кнопку фиксации.

На мой взгляд, это чепуха, это займет гораздо больше времени, чем тянуть.

5
задан Alan Storm 13 April 2009 в 21:47
поделиться

7 ответов

Фреймворки, подобные CodeIgniter, позволяют передавать переменные в контроллер без раскрытия имени переменной -

/controller/action/foo/bar/

обрабатывается как :

function action( $id, $value){
  echo $id; // outputs 'foo'
  echo $value; // outputs 'bar'
}

http://codeigniter.com/user_guide/general/controllers.html

Мне нравится это, поскольку оно дает вам контроль над тем, сколько параметров будет принимать ваш контроллер, и если важно, чтобы определенные переменные никогда не использовались Вы можете сделать логику или перенаправить соответственно.

5
ответ дан 18 December 2019 в 14:51
поделиться

var1 / value1 / var2 / value2 действительно не лучший подход, и он злоупотребляет MVC структура контроллер / действие / идентификатор . Либо вам нужно переосмыслить свой дизайн, использовать POST или параметры запроса. Скорее всего, вы можете переделать дизайн, например, если у вас есть

/search/type/movie/format/divx/year/2000

. Вы можете повторить это как

/movie/divx?year=2000

. Таким образом, ваш контроллер фильма будет искать фильмы формата divx , а затем, возможно, использовать вспомогательный или фильтр или сценарий на стороне клиента, чтобы показывать только фильмы, которые соответствуют году == 2000.

3
ответ дан 18 December 2019 в 14:51
поделиться

У вас есть возможность передавать переменные либо через GET, либо через POST.

GET будет добавлять переменные к URL-адресу, либо в симпатичном формате

 /controller/action/var1/value1/var2/value2

, либо традиционным способом

 /controller/action/?var1=value1&var2=value2

. В первом случае вам все равно потребуется написать правило перезаписи Apache для извлечения переменных из URL-адреса и маршрутизации в контроллер / действие с правильным набором переменных как часть вашего $ _REQUEST.

Если вы используете POST, вы можете добавлять скрытые значения в каждую форму как способ передачи переменных.

Для переменных, которые вы не хотел бы быть общедоступным, вы можете использовать Sessions для хранения их на стороне сервера.

1
ответ дан 18 December 2019 в 14:51
поделиться

Вы также можете выполнять запросы GET следующим образом:

www.site.com/controller/action?var1= value1 & var2 = value2

Они будут отображаться в суперглобальном $ _GET.

1
ответ дан 18 December 2019 в 14:51
поделиться

В зависимости от вашего проекта, вы также можете попробовать установить и прочитать значения, используя сеансы PHP. Эти значения не нужно передавать от сценария к сценарию как значения GET или POST. Недостатком (или положительным моментом) является то, что переменные нельзя просто передать как часть URL (или добавить в закладки).

1
ответ дан 18 December 2019 в 14:51
поделиться

Я бы избегал подхода «ключ / значение» в стиле Zend, который вы упоминали ранее. Проблема в том, что создание двух разных URL

http://www.example.com/controller/action/var1/value1/var2/value2 
http://www.example.com/controller/action/var2/value2/var1/value1

, указывающих на один и тот же ресурс, становится тривиальным. Хотя это работает, часть успеха сред стилей MVC для веб-приложений заключается в том, что они упрощают создание чистой структуры URL-адреса и связывают один URL-адрес на вашем сайте с каждым ресурсом. Подход var1 / value1 / var2 / value2 предлагает небольшое преимущество по сравнению со строками запроса ключ / значение.

Подход, который я выбрал бы здесь, состоит в том, чтобы отказаться от ключей и просто использовать значения

http://www.example.com/example/list/value1/value2/value3

, которые будут переданы в метод действия в виде массива.

class example extends Controller{ 
    public function list($args){
        //$args[0] = 'value1';
        //$args[1] = 'value2';      
        //$args[2] = 'value3';              
    }
}

Делая это таким образом, вы оставляете его до конечные пользователи вашей системы решают, как они хотят обрабатывать переменные в стиле $ GET, поощряя дизайн, который ведет к более чистому, более стабильному, URL одного ресурса.

1
ответ дан 18 December 2019 в 14:51
поделиться

То, что мне нравится использовать в моих проектах CakePHP, это «именованные параметры». По сути, мои URL выглядят так:

http://example.com/controller/action/param1:value1/param2:value2

Вы можете увидеть еще несколько примеров в руководстве Cake . Я не знаю, поддерживает ли ваш фреймворк это (или Zend), но если пекари сделали это, это можно сделать . : -)

1
ответ дан 18 December 2019 в 14:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: