Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Вспомогательные функции не загружают laravel 5 - вызов неопределенной функции

Автор вопроса: n1k41lОтветов: 4

У меня возникла проблема с загрузкой моего файла помощников в Laravel 5 и вызовом функций из представлений. Ниже приведен краткий обзор того, как я пытался настроить помощников в моем проекте L5.

  1. Создал файл helpers.php в app / Http;
  2. Файл помощников содержит базовую функцию для создания заголовка страницы.

    public function full_title($title)
    {
         $base_title = 'Social Tracking Application';
    
         if (isset($title) && $title != ''){
            $comp_title = $title . " | " .  $base_title;
         } else {
           $comp_title = $base_title;
         }
    
    return $comp_title;
    }
    
  3. Обновлен composer.json для автоматической загрузки нового файла помощников.

    "autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/"
    },
    "files":["app/Http/helpers.php"]
    

    },

  4. Запустите composer dump-autoload из терминала.

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

<title> full_title($title)  </title>

Однако, когда я перехожу на любую страницу, я получаю вызов FatalErrorMessage для неопределенной функции full_title. (обратите внимание, что сообщение обычно находится в строке заголовка, поэтому я перемещаю его в тег тела, чтобы просмотреть сообщение об ошибке).

Я не могу понять, что я здесь делаю неправильно, я видел другие примеры людей, использующих пользовательские вспомогательные файлы аналогичным образом, но мой просто не работает, я упускаю что-то очевидное?

Я управляю этим из Усадьбы.

полная база кода: https://github.com/n1k41l/SocialTrak/tree/middleware-currentUser

  • Либо существует слишком много возможных ответов, либо хорошие ответы будут слишком длинными для этого формата. Добавьте подробности, чтобы сузить набор ответов или выделить проблему, на которую можно ответить в нескольких абзацах. mate64 18.04.2015

phplaravellaravel-5composer-php

Ответы

Ответ 1 · рейтинг 4 · n1k41l

Мне удалось решить проблему самостоятельно, проблема заключалась в том, что я создал свой файл Helpers как класс php. Файл помощников должен быть только файлом php - с функциями, а не классом с функциями ... (очевидная ошибка, как только я ее нашел: S).

Ответ 2 · рейтинг 1 · Saddan

Моя проблема заключалась в том, что я использовал namespace в своем helper.php файле. В основном у него нет класса, нет пространства имен, просто какая-то простая функция, которую вы хотите разместить там

Ответ 3 · Ben Wilson

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

Helper::my_function()

Ответ 4 · Xedecimal

Я обнаружил, что у меня тоже была эта проблема в какой-то момент, когда я поместил своих помощников в app / Helpers / functions.php вместо app / Http / helpers.php. Перемещение их в последний заставило все заработать нормально.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы