2016-10-30 3 views
2

У меня есть вспомогательный файл, расположенный наНе может AutoLoad вспомогательного файла - Laravel 5.3

app/Helpers/Navigation.php 

Helper файл с пространством имен:

<?php 

namespace App\Helpers; 

class Navigation 
{ 
    public static function isActiveRoute($route, $output = 'active') 
    { 
     if (Route::currentRouteName() == $route) { 
      return $output; 
     } 
    } 
} 

я хотел автозагрузку этого файла. Так что в моем composer.json у меня есть это:

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

На мой взгляд, я хочу сделать это:

<li class="{{ isActiveRoute('main') }}"> 

Но я получаю сообщение об ошибке:

Call to undefined function isActiveRoute() 

Не уверен, что я «Я делаю неправильно. Я сделал композитор dumpautoload, когда я сменил файл композитора. Я попытался установить композитора снова, что тоже ничего не изменило.

ответ

3

Для файла helpers вы не хотите использовать класс. Вы должны определить функции, которые хотите использовать.

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

Заменить содержание вас Naviation.php с:

<?php 

if (! function_exists('isActiveRoute')) { 

    /** 
    * [Description of this function] 
    * 
    * @param $route 
    * @param string $output 
    * @return string 
    */ 
    function isActiveRoute($route, $output = 'active') 
    { 
     if (Route::currentRouteName() == $route) { 
      return $output; 
     } 
    } 
} 

Надеется, что это помогает!

+1

, что кажется, как хороший совет, но doens't решить мою проблему автозагрузки. Я заменил свой код, и я все равно получаю ту же ошибку – Christophvh

+0

Не то, что вам нужно, но вы снова запустили 'composer dumpautoload'? Кроме того, дважды проверьте, что ваш путь в вашем файле композитора правильный, то есть случай и орфография. Наконец, проверьте, нет ли какого-либо кэширования, например. opcache. –

+1

Да, я был уверен, что это, должно быть, проблема с орфографией, но я triple проверил все, и это, похоже, не так. Я мог бы просто пойти на сервис-провайдер, чтобы он работал. Хотя это просто избежать проблемы. – Christophvh

1

Когда ваш вспомогательный файл является классом, тогда нет необходимости его автозагрузкой.

Просто создайте псевдоним в config/app.php как:

'aliases' => [ 
... 
    'NavigationHelper' => App\Helpers\Navigation::class, 
... 

Используйте его в шаблоне Лезвия как:

<li class="{{ NavigationHelper::isActiveRoute('main') }}"> 

В конце концов, вы можете удалить следующий код из composer.json файла и запуска composer dumpautoload

"files": [ 
    "app/Helpers/Navigation.php" 
] 
+0

это работает, но я чувствую, что он немного избегает проблемы. Но это решает мою ошибку, поэтому ее действительное решение! спасибо – Christophvh

+0

Рад, что я мог бы помочь! Если бы это помогло, не могли бы вы отметить ответ как принятый? –

+0

Решение @Ross Wilson было больше того, что я искал. но вы получаете upvote! – Christophvh

3

У меня был sam e проблема, я предполагаю, что вы используете версию inspinia laravel, поэтому проблема заключается в том, что они забыли удалить файл-приложение/Helpers/Navigation.php

, если вы посмотрите AppServiceProvider, они используют один в ' /../Http/Helpers/Helpers.php «

, если вы хотите сделать Навигация :: isActiveRoute затем использовать файл класса

, но если вы хотите использовать {{ isActiveRoute('youRouteName') }}, то вам необходимо использовать функции» /../Http/Helpers/Helpers.php ', и нет необходимости использовать de composer.json (который был предложен в другом решении для другой проблемы)

Я знаю, что у меня такое же чувство ...

PS: Пожалуйста жаль мой английский