Intereting Posts
Что такое синтаксис «break / continue $ var» (будет удален в PHP 5.4)? WordPress – получить сообщение, основанное на мета-полевом содержимом Laravel 4 Когда я извлекаю информацию из базы данных в текст ввода, добавляется 1 лишний пробел Предупреждение при попытке конвертировать временную метку в считываемый формат для каждого экземпляра при циклировании массива PHP – печать всех свойств объекта php xpath получает узел, где атрибут равен не может установить post_max_size в laravel 4 Реализация интернационализации (языковые строки) в приложении PHP Выберите строки MYSQL, но введите строки и столбцы в строки Как создать собственный DataProvider в Yii с помощью CDataProvider? Как показать разбиение на страницы с помощью товарного кода? Curl Post-server не возвращает ответ DVLA-соскабливание ASPx Кэширование пользовательской социальной доли в WordPress Ajax-вызов для php-скрипта возвращает ошибку 404 URLEncode для HTML :: ссылка в Laravel

Где я могу добавить вспомогательные функции Laravel 4, которые могут отображать флэш-сообщения?

Я написал простую функцию display_messages() которая будет искать Session::get('errors') для данных флэш-памяти и эхо на экран.

Где я могу поместить эту функцию? В Codeigniter у вас была папка помощников, в которой вы могли бы использовать все свои маленькие глобальные вспомогательные методы.

Как предложил Усман,

  • создать файл /application/libraries/demo.php
  • определить class Demo() { внутри него
  • вызовите функцию следующим образом: {{ Demo::display() }}

Работает потому, что библиотеки и модели автоматически загружаются в start.php 76. Я считаю, что имена файлов должны соответствовать Classnames (note capital).

 <?php class Demo { public static function display() { if( !$message = Session::get('errors')) $message = 'No Errors'; echo "<pre>print_r($message)</pre>"; } } 

Не могу понять, почему у меня возникла проблема с использованием classname Common, может быть конфликт (вы могли бы определить пространство имен, если это было важно) …

Создайте helpers папок в папке вашего приложения и создайте файл application_helper.php . С таким кодом:

 // app/helpers/application_helper.php function display_messages() { exit('Yes'); } 

Затем откройте файл composer.json в корне. autoload app/helpers/application_helper.php с files композиторами.

 "autoload": { .... "files": [ "app/helpers/application_helper.php" ] 

Теперь вы можете вызвать display_messages() .

Некоторые автозагрузчики могут потребовать, чтобы вы впервые composer dump команду composer dump .

Спасибо, memeLab предоставил очень полезный ответ, который мне очень помог. Я просто хотел расширить его ответ, поскольку папка « libraries » не была каталогом автоматической загрузки, по крайней мере, не в версии / текущей версии L4, которую я использую. Также start.php, похоже, был расширен, чтобы быть start папкой с global.php , local.php и artisan.php.

Поэтому, чтобы использовать свои собственные классы для отдельных библиотек или помощников с L4-ленивым автозагрузчиком, вам просто нужно включить global.php либо папку, в которую вы хотите сохранить их, в global.php . Например, я добавил папку libraries в список каталогов.

 ClassLoader::addDirectories(array( app_path().'/commands', app_path().'/controllers', app_path().'/models', app_path().'/database/seeds', // this a custom path app_path().'/libraries', )); 

Тогда любой класс, который вы определяете в этой папке как classname.php может быть вызван через CLASSNAME::methodName($someVar); в контроллерах.

 class CLASSNAME { public static function methodName($someVar=NULL) { // whatever you want to do... return $message; } } 

Таким образом, вы можете создать вспомогательный класс и определить различные методы для использования на всех контроллерах. Также будьте осторожны, определяя регулярные функции вне своего класса таким образом, вы будете гореть, потому что они не будут работать (потому что класс не всегда загружается). (например, someFunctionName($someVar); вместо CLASSNAME::methodName($someVar); ) Если вы хотите создавать функции таким образом, вам нужно будет убедиться, что он загружен, однако я не буду подробно останавливаться на этом, потому что это лучше использовать ленивые классы загрузчика для таких вещей, чтобы вы загружали только те классы, которые вам действительно нужны.

Еще раз спасибо memeLab и Усману, я бы не получил так далеко без их ответов. 🙂

Для загрузки классов :

Создайте app/libraries/class/Message.php и добавьте класс в файл

 class Message { public static function display() { } } 

Добавить "app/libraries/class" в composer.json

 "autoload": { "classmap": [ "app/commands", "app/controllers", "app/models", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php", "app/libraries/class" ] }, 

Наконец запустите composer dump-autoload в командной строке.

Вы можете получить доступ к этому Message::display()

Для загрузки простых не-объектов php Функции :

Создайте app/libraries/function/display_messages.php и добавьте функцию в файл

 function display_messages() { } 

добавьте одну строку в start / global.php

 require app_path().'/libraries/function/display_messages.php'; 

Вы можете получить доступ к этому только с помощью display_messages()

Добавьте это в app / start / global.php

 require app_path().'/config/autoload.php'; require app_path().'/start/loader.php'; App::instance('loader',new loader($autoload)); 

создайте новый файл loader.php в app / start и добавьте:

 class loader{ private $helpers = array(); public $autoload = array( 'helpers' => array() ); function __construct($autoload = array()) { if (!empty($autoload)) $this->autoload = $autoload; foreach ($this->autoload as $key => $value) { $function = strtolower($key); $this->$function($value); } } function helpers($helpers=array()) { if (!is_array($helpers)) $helpers = explode(",",$helpers); foreach ($helpers as $key => $value) { $this->helper($value); } } function helper($helper = '',$path = '/') { $folder = app_path().'/helpers'.$path; if (file_exists($folder.$helper.'.php') && !in_array($helper, $this->helpers)){ $this->helpers[] = $helper; require $folder.$helper.'.php'; } else{ $segments = explode('/',$helper); if (is_dir($folder.$segments[0])){ array_shift($segments); $this->helper($segments,$path.$segments[0].'/'); } } } 

}

создайте новый файл autoload.php в app / config и добавьте:

 $autoload['helpers'] = array('functions'); // my autoload helpers! 

создайте новые помощники папки в приложении /, добавьте свои вспомогательные файлы. (например, myhelper.php)

 function myhelper() { echo 'helper'; } 

в вашем контроллере добавьте:

 App::make('loader')->helper('myhelper'); myhelper(); 

В L3 я обычно создавал файл application/libraries/helpers.php и require_once() в моем application/start.php . Подобно тому, как L3 имеет файл laravel/helpers.php .

Я предполагаю, что есть что-то подобное, что вы можете сделать в L4.

EDIT: просто глядя на источник, app/start/local.php кажется, что это может быть место.

Я использовал этот учебник, и я думаю, что это самый простой способ: http://laravel-recipes.com/recipes/50/creating-a-helpers-file

  1. Сначала создайте файл app / helpers.php
  2. Затем загрузите его внизу приложения \ start \ global.php следующим образом.

    // в нижней части файла требуется app_path (). '/ helpers.php';

Или измените файл composer.json и выгрузите автозагрузчик.

  { "autoload": { "files": [ "app/helpers.php" ] } } 

$ composer dump-auto

  1. то вы можете написать свои функции в helpers.php и вызвать их из любого места

     function myfunction($result){ return $result; } 

открыть root_folder/vendor/laravel/framework/src/Illuminate/Support/helpers.php

и вы можете добавить свою функцию

 if ( ! function_exists('display_messages')) { function display_messages() { return ... } }