Как использовать оператор if в модели laravel

Я использую конструктор в своей модели и печатаю данные в лезвии,

Проблема в том, что мои данные хранятся в базе данных с короткими именами, поэтому я хочу записывать фактические имена, когда они печатаются в лезвии, а не просто возвращать эти короткие имена, но я не могу заставить оператор if работать в моем конструкторе.

код

    public function buildFooter($footer, $positionid = 'footer') 
        { 
          $result = null;
          foreach($footer as $item) 
            if($item->type == $positionid) {
              $result .= "<li class='dd-item nested-list-item' data-position='{$item->position}' data-id='{$item->id}'>
              <div class='dd-handle nested-list-handle'>
                <i class='fas fa-arrows-alt'></i>
              </div>
              <div class='nested-list-content'>

//if part
                if('{$item->widget}' == 'feature-posts')
                    Feature Posts
                elseif('{$item->widget}' == 'feature-posts-sidebar')
                    Feature Posts (Sidebar)
                elseif('{$item->widget}' == 'top-categories-posts')
                    Top Categories (By Posts)
                elseif('{$item->widget}' == 'top-categories-visits')
                    Top Categories (By Visits)
                else
                    Popular Posts
                endif
//if part
                - {$item->status}
                <div class='float-right'>
                  <a href=''>Edit</a> |
                  <a href='#' class='delete_toggle' rel='{$item->id}'>Delete</a>
                </div>
              </div>".$this->buildFooter($footer, $item->id) . "</li>"; 
            }
          return $result ?  "\n<ol class=\"dd-list\">\n$result</ol>\n" : null; 
        }
        // Getter for the HTML menu builder
        public function getHTMLFooter($items)
        {
            return $this->buildFooter($items);
        }

ошибка

syntax error, unexpected end of file, expecting elseif (T_ELSEIF) or else (T_ELSE) or endif (T_ENDIF) 

Любая идея?

Обновлять

Хорошо, я подумал, что в моем клинке возникла проблема, из-за которой у меня возникла ошибка, но теперь, когда мое лезвие загружается, я получаю такие данные:

one

текущий код

public function buildFooter($footer, $positionid = 'footer') 
    { 
      $result = null;
      foreach($footer as $item) 
        if($item->type == $positionid) {
          $result .= "<li class='dd-item nested-list-item' data-position='{$item->position}' data-id='{$item->id}'>
          <div class='dd-handle nested-list-handle'>
            <i class='fas fa-arrows-alt'></i>
          </div>
          <div class='nested-list-content'>
//if part
            if($item->widget == 'feature-posts')
                Feature Posts
            elseif($item->widget == 'feature-posts-sidebar')
                Feature Posts (Sidebar)
            elseif($item->widget == 'top-categories-posts')
                Top Categories (By Posts)
            elseif($item->widget == 'top-categories-visits')
                Top Categories (By Visits)
            else
                Popular Posts
            endif
// if part
            - {$item->status}
            <div class='float-right'>
              <a href=''>Edit</a> |
              <a href='#' class='delete_toggle' rel='{$item->id}'>Delete</a>
            </div>
          </div>".$this->buildFooter($footer, $item->id) . "</li>"; 
        }
      return $result ?  "\n<ol class=\"dd-list\">\n$result</ol>\n" : null; 
    }
    // Getter for the HTML menu builder
    public function getHTMLFooter($items)
    {
        return $this->buildFooter($items);
    }

Обновление 2

На основании предложения в комментариях я внес изменения ниже

добавлены ". и ." вокруг if и некоторые изменения в ответных текстах li добавлены '' вокруг них.

//code

<div class='nested-list-content'>".
            if ($item->widget == 'feature-posts'){
                'Feature Posts'
            } elseif ($item->widget == 'feature-posts-sidebar') {
                'Feature Posts (Sidebar)'
            } elseif ($item->widget == 'top-categories-posts') {
                'Top Categories (By Posts)'
            } elseif ($item->widget == 'top-categories-visits') {
                'Top Categories (By Visits)'
            } else {
                'Popular Posts'
            }
            - {$item->status}
            ."<div class='float-right'>
//code

и теперь я получаю

syntax error, unexpected 'if' (T_IF)

На

if ($item->widget == 'feature-posts'){

Есть ли какая-то конкретная причина, по которой вы не используете шаблоны лезвий? В ваших файлах представления лезвия намного проще добиться этого с помощью @if ($ conditions) ... @endif.

hktang 26.10.2018 06:04

да, причина в том, что я использую jquery nestabe таким образом, я просто делаю {!!$xxxxx!!}, и моя вложенная форма готова к использованию

mafortis 26.10.2018 06:05

Кажется, вам не хватает двойной кавычки после <div class='nested-list-content'>. Вот почему операторы печатаются как есть ... Вы должны соединить $ resutlt в 3-х частях (оператор if в средней части).

hktang 26.10.2018 06:10

Получаю вот это syntax error, unexpected 'if' (T_IF)

mafortis 26.10.2018 06:12

@JohnDoe есть идеи?

mafortis 26.10.2018 06:22
1
5
72
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы пропустили несколько "и". Попробуйте это ниже,

        public function buildFooter($footer, $positionid = 'footer'){
            $result = null;
            foreach($footer as $item)
                if($item->type == $positionid) {
                    $result .= "<li class='dd-item nested-list-item' data-position='{$item->position}' data-id='{$item->id}'>";
                    $result .= "<div class='dd-handle nested-list-handle'><i class='fas fa-arrows-alt'></i></div><div class='nested-list-content'>";
                    if ($item->widget == 'feature-posts'){
                         $result .= "Feature Posts";
                    } elseif ($item->widget == 'feature-posts-sidebar') {
                         $result .= "Feature Posts (Sidebar)";
                    } elseif ($item->widget == 'top-categories-posts') {
                         $result .= "Top Categories (By Posts)";
                    } elseif ($item->widget == 'top-categories-visits') {
                         $result .= "Top Categories (By Visits)";
                    } else {
                         $result .= "Popular Posts";
                    }
                    $result .="-".$item->status;
                    $result .="<div class='float-right'><a href='#' class='delete_toggle text-danger' rel='{$item->id}'>Delete</a></div></div>".$this->buildFooter($footer, $item->id) . "</li>";
                  }
             return $result ?  "\n<ol class=\"dd-list\">\n$result</ol>\n" : null;
        }

Я проверил, нет ли открытого {.

mafortis 26.10.2018 07:11

Вы можете это попробовать?

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

<?php 

public function buildFooter($footer, $positionid = 'footer') 
    { 
      $result = null;
      foreach($footer as $item) 
        if($item->type == $positionid) {
          $result .= "
          <li class='dd-item nested-list-item' data-position='"
          . $item->position
          ."' data-id='".$item->id."'>
          <div class='dd-handle nested-list-handle'>
            <i class='fas fa-arrows-alt'></i>
          </div>
          <div class='nested-list-content'>";
//if part
            if($item->widget == 'feature-posts'):
                $result .= "Feature Posts";
            elseif($item->widget == 'feature-posts-sidebar'):
                $result .= "Feature Posts (Sidebar)";
            elseif($item->widget == 'top-categories-posts'):
                $result .= "Top Categories (By Posts)";
            elseif($item->widget == 'top-categories-visits'):
                $result .= "Top Categories (By Visits)";
            else:
                $result .= "Popular Posts";
            endif;
// if part
        $result .= "- " . $item->status
            ."<div class='float-right'>
              <a href=''>Edit</a> |
              <a href='#' class='delete_toggle' rel='{$item->id}'>Delete</a>
            </div>
          </div>".$this->buildFooter($footer, $item->id) . "</li>"; 
        }
      return $result ?  "\n<ol class=\"dd-list\">\n".$result."</ol>\n" : null; 
    }

// Getter for the HTML menu builder
public function getHTMLFooter($items)
{
    return $this->buildFooter($items);
}

в таком состоянии работает $result .= "- " . $item->status

mafortis 26.10.2018 07:23

Обновлено. Пожалуйста, проверьте .. Я рекомендую вам прочитать документацию Laravel по шаблону Blade и контроллерам ...

hktang 26.10.2018 07:25

Другие вопросы по теме