从控制器传递函数到查看

时间:2015-11-19 15:13:31

标签: php laravel laravel-5 laravel-5.1

我有一个接收字符串的函数,并将其转换为Mac地址格式。

    function mac_adress($str){
        $end = substr($str, -12);
        $chunks = str_split($end, 2);
        $result = implode(':', $chunks);
        return $result;
    }

我希望传递函数到我的视图中,所以我可以像这样调用它

$str = 836997595163;

{!!mac_adress($str)!!} //83:69:97:59:51:63

我有多个需要此功能的视图,我试图避免将它们放在我的每个刀片文件中。

我该怎么做?

甚至可能吗?

4 个答案:

答案 0 :(得分:4)

这可能是helper的合适人选,具体取决于您在整个网站中确实需要多少功能。

创建一个helpers.php文件

<?php

function mac_adress($str){
     $end = substr($str, -12);
     $chunks = str_split($end, 2);
     $result = implode(':', $chunks);
     return $result;
 }

然后在composer.json

中自动加载
{
    "autoload": {
        "files": [
            "app/helpers.php"
        ]
    }
}

然后在您的终端中运行composer dump-autoload,您的帮助程序方法将在整个应用程序中可用。这样做,您可以根据需要向helpers.php添加更多辅助函数。

答案 1 :(得分:1)

您可以将其设置为会话变量,并多次调用它并且需要许多地方

$_SESSION['mac-address'] = mac_address($str);

此处提供更多信息$_SESSION

您也可以使用laravels会话库Laravel Session

答案 2 :(得分:1)

将其导出到服务类,您可以从中轻松地从每个视图调用

<?php $formatedMacAddress = \App\Services\MacAddressHelper::formatMacAdress($macAddress);?>


<div>{{ $formatedMacAddress }}</div>
namespace \App\Services;

class MacAddressHelper
{
    public static function formatMacAdress(string $macAddress)
    {
        ...
    }
}

答案 3 :(得分:1)

另一种干净的方法是通过扩展刀片(利用@ dtj&#39;答案):

创建一个helpers.php文件:

// app/helpers.php

function macAddress($str) {
    $end = substr($str, -12);

    $chunks = str_split($end, 2);

    $result = implode(':', $chunks);

    return $result;
}

编辑您的composer.json文件:

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

运行composer dump-autoload

在AppServiceProvider中:

// app/Providers/AppServiceProvider.php

public function boot()
{
    Blade::directive('mac', function($expression) {
        return "<?php echo macAddress{$expression}; ?>";
    });
}

然后在你的观点中:

@mac('836997595163')

通过这种方式,您可以随时修改辅助函数并对其进行单一引用。