Laravel 5.1,创建全局函数并创建从数组

时间:2015-12-27 20:23:02

标签: php arrays oop laravel-5.1 global

是否有一种简单的方法可以从一维数组构建链接列表?

例如:

$array = [
    'slug-1' => 'Title 1',
    'slug-2' => 'Title 2',
    'slug-3' => 'Title 3'
]

回应如下:     <a href="slug-1">Title 1</a>, <a href="slug-2">Title 2</a>, <a href="slug-3">Title 3</a>

基本上是一个修改过的内爆函数,可以添加class="something"等类似的额外参数。

我怀疑是否存在我正在尝试做的事情。

创建全局函数:

  • 创建app/Http/helpers.php
  • composer.json
  • 中添加"files": ["app/Http/helpers.php"]来修改autoload
  • 运行composer dump-autoload

here所述。

不确定如何从这里开始。我尝试将以下代码添加到helpers.php

<?php


/**
 * Given the array of type ['slug' => 'title', ...]
 * create new array of type [ '0' => '<a href="slug">title</a>', ...]
 * if $attributes given (also array) as ['id'=>'newLink', 'class'=>'newClass']
 * add them to first array to get <a href='slug' id='newLink' class='newClass'>title</a>
 *
 *
 * @param $array, $attributes
 * @return array
 */
public function linkifyArray($array, $attributes){
    $arrayOfLinks = $array;
    return $arrayOfLinks;
}

这没什么,但我试图解释我在评论中试图做的事情。

我相信我可以自己创建此功能,但是当我将上面的代码复制到helpers.php文件时,我收到内部服务器错误,PHPStorm告诉我他expecting statement

所以我在这里遗漏了一些非常基本的东西,并希望得到一些帮助(最受欢迎的链接),然后才能继续创建我的辅助功能。

如果我以错误的方式接近,请告诉我。

最后,我希望能够在我的应用中随时随地进行操作:

implode(', ', $array->linkifyArray())

在此问题的开头获取$array的链接列表。

编辑:

我写了这个函数:

public function linkifyArray($array, $attributes) {
    $htmlAttributes = '';
    //inline attributes before appending them to <a></a>
    if (is_array($attributes))
    {
        foreach ($attributes as $k => $v)
        {
            $htmlAttributes.= $k.'="'.$v.'" ';
        }
    }

    $arrayOfLinks = [];
    //create array of links
    if(is_array($array))
    {
        foreach ($array as $kk => $vv)
        {
            $arrayOfLinks[]='<a '.$htmlAttributes.' href="'.$kk.'">'.$vv.'</a>';
        }
    }

    return $arrayOfLinks;
}

并尝试在namespace App\Http;下面添加<?php,但我仍然收到内部服务器错误。

3 个答案:

答案 0 :(得分:2)

这就是我开始工作的方式。

app/Http/helpers.php

<?php

namespace app\Http;

class Helperfunctions {
    /**
     * Given the array of type ['slug' => 'title', ...]
     * create new array of type [ '0' => '<a href='slug'>title</a>]
     * if $attributes given (also array), implode them from ['id'=>'newLink', 'class'=>'newClass']
     * to <a href='slug' id='newLink' class='newClass'>title</a>
     *
     *
     * @param $array, $attributes, $prefix
     * @return array
     */
    public static function linkifyArray($array, $attributes, $prefix) {
        $htmlAttributes = '';
        //inline attributes before appending them to <a></a>
        if (is_array($attributes))
        {
            foreach ($attributes as $k => $v)
            {
                $htmlAttributes.= $k.'="'.$v.'" ';
            }
        }

        $arrayOfLinks = [];
        //create array of links
        if(is_array($array))
        {
            foreach ($array as $kk => $vv)
            {
                $arrayOfLinks[]='<a '.$htmlAttributes.' href="'.$prefix.$kk.'">'.$vv.'</a>';
            }
        }

        return $arrayOfLinks;
    }
}

添加到composer.json autoload>classmap

"autoload": {
    "classmap": [
        "app/Http/helpers.php"
    ]
},

运行

composer dump-autoload

在视图中调用该函数:

{!! implode(', ', \app\Http\Helperfunctions::linkifyArray($myModel()->get()->lists('name', 'slug')->toArray(), [], '/prefix-uri/')) !!}

Link到我使用的教程。

答案 1 :(得分:2)

我已经看到,你为自己找到了解决方案。但是如果你不想用类来处理这类东西,你可以使用原始答案的方法。唯一的问题是,在你的helpers.php文件中,你不能使用像public等关键字......

你必须看到这就像一堆没有捆绑在一个类中的函数。在类之外,public关键字会导致错误。

只需在helper.php中按以下方式定义函数:

<?php 

function linkifyArray($array, $attributes, $prefix) {
    // code
}

然后您只需键入(从答案中取得的示例)

即可在您的应用程序中访问它
{!! implode(', ', linkifyArray($myModel()->get()->lists('name', 'slug')->toArray(), [], '/prefix-uri/')) !!}

答案 2 :(得分:0)

public function linkifyArray($array, $attributes){
    $arrayOfLinks = $array;
    $html = "";
    $id = "";
    $class = "";
    if($attributes['id'])
    $id = $attributes['id'];
    if($attributes['class'])
    $class = $attributes['class'];
    foreach($arrayOfLinks as $key=>$val)
    {
    $html.="<a href='".$key."' id='".$id."' class='".$class."'>".$val."</a>";
    }
    return $html;
  }