我编写了一个简单的display_messages()
函数,可以在Session::get('errors')
中搜索Flash数据并将其回显到屏幕上。
我在哪里放这个功能?在Codeigniter中,您有一个帮助文件夹,您可以在其中粘贴所有小型全局帮助程序方法。
答案 0 :(得分:20)
正如Usman建议的那样,
class Demo() {
{{ Demo::display() }}
可以使用,因为库和模型在start.php第76行自动加载。我相信文件名必须与Classnames匹配(注意大写)。
<?php
class Demo {
public static function display() {
if( !$message = Session::get('errors'))
$message = 'No Errors';
echo "<pre>print_r($message)</pre>";
}
}
无法弄清楚为什么我在使用classname Common时出现问题,可能存在冲突(如果这很重要,你可以定义命名空间)......
答案 1 :(得分:13)
在app文件夹中创建一个文件夹helpers
,然后创建一个文件application_helper.php
。有了这样的代码:
// app/helpers/application_helper.php
function display_messages()
{
exit('Yes');
}
然后在root中打开您的composer.json文件。自动加载app/helpers/application_helper.php
与作曲家files
。
"autoload": {
....
"files": [
"app/helpers/application_helper.php"
]
完成后,您现在可以拨打display_messages()
。
某些自动加载器可能要求您首次运行composer dump
命令。
答案 2 :(得分:11)
谢谢memeLab提供了一个非常有用的答案,这对我帮助很大。我只想扩展他的答案,因为“libraries
”文件夹不是自动加载目录,至少在我正在使用的L4的发布/当前版本中没有。此外,start.php似乎已扩展为start
文件夹global.php
,local.php和artisan.php。
因此,要将自己的类用于L4延迟自动加载器的单独库或帮助程序,您只需要将这些文件夹中的任何一个文件夹包含在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和Usman,如果没有他们的答案我就不会有这么远。 :)
答案 3 :(得分:7)
创建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()
答案 4 :(得分:1)
在app / start / global.php中添加此内容
require app_path().'/config/autoload.php';
require app_path().'/start/loader.php';
App::instance('loader',new loader($autoload));
在app / start中创建一个新文件loader.php并添加:
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].'/');
}
}
}
}
在app / config中创建一个新文件autoload.php并添加:
$autoload['helpers'] = array('functions'); // my autoload helpers!
在app /中创建一个新的文件夹助手,添加你的助手文件。 (es.myhelper.php)
function myhelper()
{
echo 'helper';
}
在你的控制器中添加:
App::make('loader')->helper('myhelper');
myhelper();
答案 5 :(得分:0)
在L3中,我通常会在application/libraries/helpers.php
中创建一个require_once()
文件和application/start.php
文件。与L3具有laravel/helpers.php
文件的方式类似。
我假设您在L4中可以做类似的事情。
编辑:只看来源,app/start/local.php
似乎可能就是这个地方。
答案 6 :(得分:0)
我使用本教程,我认为这是最简单的方法:http://laravel-recipes.com/recipes/50/creating-a-helpers-file
然后将其加载到 app \ start \ global.php 的底部,如下所示。
//在文件的底部 require app_path()。'/ helpers.php';
或者更改 composer.json 文件并转储自动加载器。
swap
$ composer dump-auto
然后你可以在helpers.php中编写你的函数并从任何地方调用它们
{
"autoload": {
"files": [
"app/helpers.php"
]
}
}
答案 7 :(得分:-17)
打开root_folder/vendor/laravel/framework/src/Illuminate/Support/helpers.php
你可以添加你的功能
if ( ! function_exists('display_messages'))
{
function display_messages()
{
return ...
}
}