@Billy_Milligan

Как в laravel использовать свои переменные и функции в представлении?

На странице нужно выводить слова с адекватными окончаниями в зависимости от числа. Таких слов достаточно.

Как правильно сделать это? Только начал изучать laravel не очень понятно куда выносить логику.

public static $time_hour = array('час', 'часа', 'часов');
    public static $time_minute = array('минута', 'минуты', 'минут');
    /*
     * остальные слова...
    */

    public static function getNumEnding($number, $ends)
    {
        if($number == 0) {
            return $ends[0];
        }

        if ($number < 1) {
            if ($number < 0.3) {
                return '&#188; '.$ends[1];
            }
            if ($number > 0.6) {
                return '&#190; '.$ends[1];
            }
            return '&#189; '.$ends[1];
        }

        $i = ceil($number) % 1000;

        if ($i >= 11 && $i <= 19) {
            return $number.' '.$ends[2];
        }

        switch ($i) {
            case (1):
                return $number.' '.$ends[0];
            case (2):
            case (3):
            case (4):
                return $number.' '.$ends[1];
            default:
                return $number.' '.$ends[2];
        }
    }

    echo getNumEnding(5, $time_hour); //5 часов
    echo getNumEnding(3, $time_minute);//3 минуты


Пытался описать функцию и переменные в контроллере, но не получается вызвать во вьюхе (ошибка, оно и понятно).
  • Вопрос задан
  • 1517 просмотров
Решения вопроса 2
FMars
@FMars
Если Laravel 5.1, то:
laravel.com/docs/5.1/blade#service-injection

Как делаю я.
1. Создаем класс с нашим функционалом. К примеру в папке app
// app/Some.php

namespace App;

class Some {
    public function getValue() {
        return "VALUE";
    }
}


2. Регистрируем класс в сервис провайдере. app/Providers/AppServiceProvider.php.
В метод register вписываем:
public function register()
    {
        $this->app->bind('Some', function($app)
        {
            return new \App\Some;
        });
    }
}


3. В вюхах используем следующую конструкцию:
@inject('some', 'Some')

<div>
    Value: {{ $some->getValue() }}.
</div>
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы