20

我编写了一个简单的display_messages()函数,它将搜索Session::get('errors')闪存数据并将其回显到屏幕上。

我把这个功能放在哪里?在 Codeigniter 中,您有一个 helpers 文件夹,您可以在其中粘贴所有小的全局帮助方法。

4

8 回答 8

20

正如乌斯曼建议的那样,

  • 创建一个文件/application/libraries/demo.php
  • class Demo() {在里面定义一个
  • 像这样调用函数:{{ Demo::display() }}

之所以有效,是因为库和模型在 start.php 第 76 行中自动加载。我相信文件名必须与类名匹配(注意大写)。

<?php

class Demo {

    public static function display() {

        if( !$message = Session::get('errors'))
            $message = 'No Errors';

        echo "<pre>print_r($message)</pre>";

    }

}

不能完全弄清楚为什么我在使用类名 Common 时遇到问题,可能存在冲突(如果这很重要,您可以定义一个命名空间)...

于 2013-02-16T21:25:47.937 回答
13

helpers在您的 app 文件夹中创建一个文件夹并创建一个文件application_helper.php。使用这样的代码:

// app/helpers/application_helper.php

function display_messages()
{
  exit('Yes');
}

然后在根目录中打开您的 composer.json 文件。app/helpers/application_helper.php用 composer自动加载files

"autoload": {
....

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

完成,您现在可以调用display_messages().

某些自动加载器可能需要您composer dump第一次运行命令。

于 2013-02-16T13:09:15.470 回答
11

谢谢 memeLab 提供了一个非常有用的答案,对我帮助很大。我只是想扩展他的答案,因为“ libraries”文件夹不是自动加载目录,至少在我使用的 L4 的发布/当前版本中不是。此外,start.php 似乎已扩展为带有local.php 和 artisan.php的start文件夹。global.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;
    }

}

因此,以这种方式,您可以创建一个辅助类并定义在整个控制器中使用的不同方法。还要小心以这种方式在 Class 之外定义常规函数,因为它们不会工作(因为类并不总是被加载)。(例如someFunctionName($someVar);,而不是CLASSNAME::methodName($someVar);)如果您想以这种方式创建函数,您需要确保已加载,但是我不会详细说明这一点,因为最好将惰性加载器类用于此类事情,因此您只加载你真正需要的课程。

再次感谢 memeLab 和 Usman,如果没有他们的回答,我不会走这么远。:)

于 2013-06-19T14:37:40.197 回答
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()

用于加载普通的非对象 php函数

在文件中创建app/libraries/function/display_messages.php和添加函数

function display_messages() {

}

在 start/global.php 中添加一行

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

您可以通过display_messages()

于 2014-03-17T08:29:42.240 回答
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/ 中创建一个新文件夹 helpers,添加您的帮助文件。(例如 myhelper.php )

function myhelper()
{
echo 'helper';
}

在您的控制器中添加:

App::make('loader')->helper('myhelper');
    myhelper();
于 2014-07-27T08:03:50.217 回答
0

在 L3 中,我通常会创建一个application/libraries/helpers.php文件,并将require_once()其放在我的application/start.php. 类似于 L3 的laravel/helpers.php文件。

我假设你可以在 L4 中做类似的事情。

编辑:只看来源,app/start/local.php似乎它可能是这个地方。

于 2013-02-15T20:23:10.830 回答
0

我使用了本教程,我认为这是最简单的方法: http: //laravel-recipes.com/recipes/50/creating-a-helpers-file

  1. 首先创建文件 app/helpers.php
  2. 然后将其加载到app\start\global.php的底部,如下所示。

    // 在文件底部 require app_path().'/helpers.php';

或者更改您的composer.json文件并转储自动加载器。

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

$ 作曲家转储自动

  1. 然后你可以在 helpers.php 中编写你的函数并从任何地方调用它们

    function myfunction($result){ 
         return $result;
        }
    
于 2015-11-04T14:11:27.667 回答
-17

打开root_folder/vendor/laravel/framework/src/Illuminate/Support/helpers.php

你可以添加你的功能

if ( ! function_exists('display_messages'))
{
    function display_messages()
    {
        return ...
    }
}
于 2013-06-21T13:49:41.417 回答