Undefined variable в view MVC

106
11 февраля 2021, 19:50

Есть такая проблема переменная объявленная в контроллере не работает в шаблоне.Подскажите проблему пожалуйста. Вот код .Заранее спасибо.

Controller.php

class ExampleController{
  public function indexAction(){
         require_once("layout/contact.php");
  }
  private function checkAction($data){
         $data = htmlspecialchars($data);
         $data = strip_tags($data);
         $data = trim($data);
         $data = stripsclashes($data);
         return $data;
  }
  public function someAction(){
   $name = "";
   $age ="";
   $city = "";
   $country = "";
   if(isset($_POST["button"])){
            $name = $this->checkAction($_POST["name"]);
            $age = $this->checkAction($_POST["age"]);
            $city = $this->checkAction($_POST["city"]);
            $country = $this->checkAction($_POST["country"]);
   }
   require_once("layout/contact.php");
   }

View

layout/contact.php

<form action="#" class="contact-form" method="POST">
  <div class="input-wrapper">
    <input type="text" name="name" placeholder="Enter  Name" id="cont">
    <?php print($name); ?>
  </div>
  <div class="input-wrapper">
    <input type="number" name="age" placeholder="Enter Age" id="cont">
    <?php print($age); ?>                           
  </div>
  <div class="input-wrapper">
    <input type="text" name="city" placeholder="Enter City" id="cont">
    <?php print($city); ?>                              
  </div>
  <div class="input-wrapper">
    <input type="text" name="country" placeholder="Enter Country" id="cont">
<?php print($city); ?>
</div>
<div class="input-wrapper">
   <button type="submit" name="button" id="mss-btn">Send Message</button>
</div>
</form>

Output:
 Undefined variable 
 $name;
 $age;
 $city;
 $country;
Answer 1

Когда вы делаете require_once("layout/contact.php"), ваш шаблон ничего не может знать о переменных которые объявлены в методе другого класса, он находится в другой области видимости.

Самый простой и самый плохой путь: установить значения в глобальную переменную, например в GET, Но так делать не стоит.

Создайте еще один файл ViewData

 class ViewData {
   protected static  $data = [];
   public static function getData() {
     return self::$data;
   }
   public static function setData($key, $value) {
      self::$data[$key] = $value;
   }
}
ViewData::setData('foo', 'bar');
ViewData::getData('foo', 'bar');

подключите его в контроллере и создайте через new ViewData()

 require_once("ViewData.php");

Затем в контроллере устанавливайте переменные ::setData($key, $value) Подключите этот же файл в свой шаблон и доставайте из него установленные значения через ::getData($key, $value)

READ ALSO
Где лежит шаблон пустой корзины в Битрикс?

Где лежит шаблон пустой корзины в Битрикс?

Подскажите какой файл править чтобы поменять шаблон пустой корзины компонента bitrix:salebasket

100
Передача данных между 2 открытыми фрагментами

Передача данных между 2 открытыми фрагментами

Для обычной передачи от одного фрагмента в другое с его заменой можно использовать:

123
Массив: ячейки или элементы?

Массив: ячейки или элементы?

Читаю про массив, хотелось бы спросить:

105
Проблема с YouTube видео

Проблема с YouTube видео

Сделал себе ютуб проигрыватель в приложение (по этому уроку https://wwwyoutube

144