Получить входные значения из формы бэкэнда [octobercms] - PullRequest
0 голосов
/ 19 марта 2019

В этом коде все работает нормально, кроме $result = Input::get('term'); Кто-то, пожалуйста, помогите мне получить входное значение поля term.Когда я делаю это $result = 8;, все работает хорошо.

Форма в бэкэнде плагина

В моем плагине "Урок" модель

<?php

 namespace Cng\Tennis\Models;

 use Model;
 use Flash;
 use Db;
 use Input;
 use request;
 use Cng\Tennis\Models\Term as termModel;

 class Lesson extends Model
 {  
public function getSdateOptions () {

  $result = Input::get('term');
  $term = termModel::select('id','start_date')->where('id',  $result )->first();

   if ($this->term_id == $result ) { 
        return [$term->id => $term->start_date];   
    }
    else{
      return ['Select a date' => 'Select a date' ];
      }
    }

public function getFdateOptions () {
        return ['Select a date' => 'Select a date' ];
    }

В ямле

    term:
        label: Term
        nameFrom: name
        descriptionFrom: description
        span: auto
        containerAttributes: {  }
        type: dropdown
        emptyOption: Select
        tab: 'Event Details'
        dependsOn:
            - location

    sdate:
        label: 'Start Date'
        mode: date
        span: left1
        cssClass: ''
        required: 1
        dependsOn:
            - term
        type: dropdown
        tab: 'Event Details'
        disabled: 1

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Во-первых, ваша проблема вызвана тем, что поле term не названо таковым в HTML. Если вы посмотрите на сгенерированные входные данные формы в браузере или запрос AJAX, который отправляется при срабатывании триггера dependsOn, вы заметите, что фактическое имя поля для поля term имеет префикс с псевдонимом виджета «Форма». (возможно Form, поэтому в данном случае фактическое имя поля Form[term]).

Однако вам даже не нужно вообще использовать Input, вы можете просто ссылаться на свойство модели, на которое поле term ссылается непосредственно в вашей функции:

$options = [0 => 'Select a start date'];
$term = TermModel::find($this->term);

if ($term) {
    $options = [$term->id => $term->start_date];
}

return $options;

См. https://octobercms.com/docs/backend/forms#field-dependencies для получения дополнительной информации о том, как правильно использовать свойство dependsOn. Обратите внимание, что вы, возможно, могли бы комбинировать его в вашем случае со свойством trigger, чтобы также скрыть поле start_date, пока в поле term не будет выбран правильный параметр.

0 голосов
/ 21 марта 2019

Попробуйте заменить select('id','start_date') на all() или find($result), и, если вы хотите получить только дату начала, сделайте pluck->('start_date'). Кажется, вы не можете использовать select на красноречивых моделях, что имеет смысл в моем тесте.

Это то, что я получаю, когда запускаю select без вызова DB:

    $names = Products::select('id','name')->where('id', 1);
    return $names;

enter image description here

Однако, когда я получаю доступ к модели обычными методами запроса коллекции, я получаю это:

    $names = Products::all()->where('id', 1);
    return $names;

enter image description here

Наконец, вы можете просто использовать $names = Products::find('1')->pluck('name')->first(); заменить 1 на $result и 'name' на 'start_date' в вашем случае.

...