【问题标题】:Laravel 5.1, creating global functions and creating new method for creating links from arrayLaravel 5.1,创建全局函数并创建从数组创建链接的新方法
【发布时间】:2015-12-27 20:23:01
【问题描述】:

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

例如:

$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,在autoload块中添加"files": ["app/Http/helpers.php"]
  • 运行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;
}

这没有任何作用,但我试图解释我在 cmets 中要做什么。

我相信我可以自己创建这个函数,但是当我将上面的代码复制到 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;
}

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

【问题讨论】:

    标签: php arrays oop laravel-5.1 global


    【解决方案1】:

    这就是我让它工作的方式。

    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.jsonautoload&gt;classmap:

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

    运行

    composer dump-autoload

    在视图中调用函数为:

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

    Link我使用的教程。

    【讨论】:

      【解决方案2】:

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

      您必须将其视为一组未捆绑在类中的函数。而在类之外,public 关键字会导致错误。

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

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

      然后您只需键入即可在您的应用程序中访问它(示例取自您的答案)

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

      【讨论】:

      • 谢谢,我刚刚收到有关此的通知。现在对我来说很有意义。我的问题是我是自学成才的,所以尽管我能应付自如,但我最终还是错过了一些非常基本的东西:/
      【解决方案3】:
      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;
        }
      

      【讨论】:

      • 是的,这就是我的想法,但是我做错了,因为每当我在 helpers.php 文件中包含任何内容时,我都会收到 Internal error。迭代不应该是问题,我在内部错误方面遇到了困难,而且我不知道这是如何工作的,因为我是第一次做这个全局函数的事情。我想这种方法还可以吗?
      • 是的,方法没问题,那么可能是自动加载的问题。
      • 似乎在&lt;?php 下方添加namespace App\Http; 可能是解决方案。当一切都在确认时,我会回来的。
      • 如果你使用的是全局 App 命名空间,那么可以。
      • 这个错误是因为public关键字。如果您没有类,则访问修饰符无效。只需从 public function() 中删除 public ...它应该可以工作
      猜你喜欢
      • 2019-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 2015-12-21
      • 2011-07-13
      • 1970-01-01
      • 2015-12-22
      相关资源
      最近更新 更多