PHP Laravel 在所有视图中使用辅助类

Posted

技术标签:

【中文标题】PHP Laravel 在所有视图中使用辅助类【英文标题】:PHP Laravel use helper class in all views 【发布时间】:2016-04-15 02:50:00 【问题描述】:

我想创建一个帮助程序(函数)以避免在 Laravel 5 中的所有视图之间重复代码。该函数应该使用数据库中的数据(Eloquent),因此它不能只是一个简单的函数或通用视图编写器.

理想情况下应该是这样的:

!! Helper::addLinks($text) !!

Helper 类使用 Eloquent 验证 $value。我想避免更改所有控制器。这方面的最佳做法是什么?

更新;我有以下工作原型。此函数搜索文本并用超链接替换从字典中找到的单词:

function addLinks($text) 
    //retrieve words from database
    $words = Words::all();

    //build dictionary with values that needs replacement
    $patterns = array();
    foreach ($words as $word) 
        $patterns[$word->id] = $word->word_name;
    

    //build dictionary with values the replacements
    $replacements = array();
    foreach ($words as $word) 
        $replacements[$word->id] = "<a href=\"worddetails.php?id=" . $word->id . "\">" . $patterns[$word->id] . "</a>";
    

    //return text, replace words from dictionary with hyperlinks
    return str_replace($patterns, $replacements, $text);

我想在视图中的几个文本块和段落中使用此功能。哪种方法最好?

【问题讨论】:

您应该就为什么不能使用视图编辑器或view()-&gt;share() 提供更多论据?或者就此而言,为什么您可以使用类方法,但不能使用辅助函数(从您所描述的和逻辑的角度来看,这将起到相同的作用) ?因为它使用 Eloquent 数据库中的数据的论点并不意味着您不能使用您描述的任何选项。 像现在这样将它实现为辅助函数并没有什么问题,因为它并没有那么复杂,而且它可以达到它的目的。如果您有更多属于同一功能类别的辅助函数,或者如果此函数变得更复杂并且需要拆分为更多支持方法,那么您可以按照@SteveBauman 在他的回答中建议的那样将代码重构为一个类(但在这一点并不是真正需要的)。 作为替代方案(因为您的助手正在处理 html 内容),您可以使用 laravelcollective/html 包创建一个处理此问题的 HTML macro。 【参考方案1】:

您可以在您的app/ 文件夹中创建一个助手类吗?例如。

namespace App;

use App\Models\User;

class Helper

    /**
     * Description...
     *
     * @param mixed $value
     *
     * @return mixed
     */
    public static function lookup($value)
    
        return User::find($value);
    

您可以拨打!! App\Helper::lookup($value) !!使用它

使用帮助器准确了解您希望通过 eloquent 验证的内容会很有用,这样我们就可以正确地确定该用例的最具吸引力实践。

【讨论】:

我试过但我得到以下错误:非静态方法 App\Helper::formatUrlsInText() 不应该被静态调用,假设 $this 来自不兼容的上下文 我使用的是 Laravel 8 版本。 !! \App\Helperclassname::functionname() !! 在刀片文件中工作。谢谢。

以上是关于PHP Laravel 在所有视图中使用辅助类的主要内容,如果未能解决你的问题,请参考以下文章

laravel 5.5 《电商实战 》辅助函数

PHP 全局使用 Laravel 辅助函数 dd

辅助函数未加载 laravel 5 - 调用未定义函数

Laravel 5.4 和 WordPress 4.7 的辅助函数 __() 冲突

PHP 全局使用 Laravel 辅助函数 dd

覆盖 laravel 5 辅助函数