将功能从控制器传递到视图

问题描述 投票:1回答:4

我有一个函数,它接受一个字符串,并将其转换为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

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

我怎样才能做到这一点 ?

它甚至可能吗?

php laravel laravel-5 laravel-5.1
4个回答
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
投票

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

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

更多信息,请访问$_SESSION

您也可以使用laravel会话库qazxsw poi


1
投票

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

创建一个helpers.php文件:

Laravel Session

编辑您的composer.json文件:

// app/helpers.php

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

    $chunks = str_split($end, 2);

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

    return $result;
}

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

在AppServiceProvider中:

composer dump-autoload

然后在你的意见:

// app/Providers/AppServiceProvider.php

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

这样您就可以随时修改辅助函数并对其进行单一引用。


1
投票

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

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


<div>{{ $formatedMacAddress }}</div>
© www.soinside.com 2019 - 2024. All rights reserved.