2013-08-19 7 views
0

Основываясь на recommendtations в theese ответов: What are the best practices and best places for laravel 4 helpers or basic functions?Что должен расширить класс laravel?

Я создал файл app/library/sitehelpers.php и добавить его в приложение. Что должен расширить мой класс и как я могу его переопределить в контроллере?

<?php 

    class SiteHelpers{ 

    function save($type, $postid, $url, $author, $content) 
    { 
     $post = new Post; 
     $post->type = $type; 
     $post->postid = $postid; 
     $post->url = $url; 
     $post->author = $author; 
     $post->content = $content; 
     try 
     { 
     $post->save(); 
     echo $post; 
     }catch(Exception $e){ 
      throw new Exception('Already saved', 0, $e); 
     } 
    } 
} 

Я стараюсь ссылаться на него, как это в контроллере:

public function savepostController($type, $postid, $url, $author, $content) 
{ 
    SiteHelpers::save($type, $postid, $url, $author, $content); 
} 

, но я получаю метод контроллера не найден.

ответ

0

Вам не нужно расширять что-либо, чтобы ваш класс мог использоваться в laravel. Пока ваш файл находится в пути для композитора, ваш класс будет загружен laravel.

Вы можете расширить или реализовать некоторые классы laravel, чтобы добавить некоторую функцию (например, фасады), но это не является обязательным требованием.

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

Редактировать: Чтобы вызвать его статически (с помощью: :), вам также необходимо сделать свою функцию статичной или использовать laravel IoC (facade) для вас. (дополнительная информация в документах: http://laravel.com/docs/facades)

+0

Хорошо, где же в ларавеле? – Himmators

+0

, а также, если это была вспомогательная функция, как бы я ссылался на нее с контроллера? – Himmators

+0

Отредактировано, чтобы добавить точность о том, как вызвать вашу функцию статическим способом. – Atrakeur