我在哪里放置可以显示flash消息的Laravel 4辅助函数?

时间:2013-02-15 20:11:50

标签: php laravel laravel-4

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

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

8 个答案:

答案 0 :(得分:20)

正如Usman建议的那样,

  • 创建文件 /application/libraries/demo.php
  • 在其中定义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()

访问该内容

用于加载普通非对象php 功能

创建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

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

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

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

    swap

    $ composer dump-auto

    1. 然后你可以在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 ...
    }
}