2013-11-01 1 views
1

Обычно в Laravel я называю модель, создавая что-то вроде этого:Laravel 4 Blade: Как использовать пользовательские модели?

class Config extends Eloquent { 

protected function getBaseUri() { 
    return sprintf(
     "%s://%s%s", isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http', $_SERVER['HTTP_HOST'], '/project/public/assets/' 
    ); 
} 

public static function getBaseImagePath() { 
    return $this->getBaseUri() . 'image/'; 
} 

} 

и назвать его где-нибудь в PHP файлы, как это:

эхо Config :: getBaseImagePath();

Теперь я мигрирующие в .blade.php и мне нужно вызвать ту же функцию от модели, так что я сделал это где-то в лезвии:

{{Config :: getBaseImagePath()}}

И это не работает (довольно странно, поскольку то, что я знаю, это все, что делает лезвие, это конвертировать теги {{}} в теги php). Может ли кто-нибудь объяснить, как сделать эту работу? Благодарю.

Ошибка я получаю:

Призыв к неопределенным метод Осветите \ Config \ Repository :: getBaseImagePath()

ответ

4

Вы используете имя Config класса Laravel.

Я не знаю, почему он работает на PHP, а не в Blade, но это не должно.

Так у вас есть несколько вариантов:

1) Измените Config Laravel псевдоним в приложение/Config/app.php

2) Измените свое имя Config класса.

3) Создание пространства имен для классов:

<? namespace MyName\Services 

class Config extends Eloquent { 

    protected function getBaseUri() { 
     return sprintf(
      "%s://%s%s", isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http', $_SERVER['HTTP_HOST'], '/project/public/assets/' 
     ); 
    } 

    public static function getBaseImagePath() { 
     return $this->getBaseUri() . 'image/'; 
    } 

} 

Execute

composer dump-autoload 

И использовать его

{{ \MyName\Services\Config::getBaseImagePath() }} 
+0

спасибо за ответ, да, это потому, что имя класса – user2002495

2

В коде

{{ Config::getBaseImagePath() }} 

Это указывает к классу laravel Illuminate\Config\Repository, где этот метод недоступен. Измените имя или используйте namespace. Кроме того, вы не можете использовать $this в методе static, вместо этого вы можете использовать

public static function getBaseImagePath() { 
    return static::getBaseUri() . 'image/'; 
} 
+0

спасибо за ответ, да, это происходит потому, что имя класса в пространстве имен, забыл изменить его на что-то еще – user2002495

+0

@ user2002495, Добро пожаловать и рад, что это помогло :-) –