Я написал простую функцию display_messages()
которая будет искать Session::get('errors')
для данных флэш-памяти и эхо на экран.
Где я могу поместить эту функцию? В Codeigniter у вас была папка помощников, в которой вы могли бы использовать все свои маленькие глобальные вспомогательные методы.
Как предложил Усман,
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()
Создайте 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
Затем загрузите его внизу приложения \ start \ global.php следующим образом.
// в нижней части файла требуется app_path (). '/ helpers.php';
Или измените файл composer.json и выгрузите автозагрузчик.
{ "autoload": { "files": [ "app/helpers.php" ] } }
$ composer dump-auto
то вы можете написать свои функции в 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 ... } }