【问题标题】:Laravel5: Access public variable in another classLaravel5:访问另一个类中的公共变量
【发布时间】:2015-06-15 10:10:13
【问题描述】:

我有一个名为LanguageMiddleware.php的中间件文件:

...
class LanguageMiddleware {

    //ISO language codes:
    public $languages = ['en','es','fr','de','pt','pl','zh','ja'];
    ...

LanguageMiddleware.phplaravelProj/app/Http/Middleware/

这是我的问题:我有一个名为 master.blade.php 的刀片模板文件,我试图在其中输出语言列表

@foreach (App\Http\Middleware\LanguageMiddleware\languages as $lang)
    <a class=\"setLang\" href=\"lang/en\">{{ Locale::getDisplayLanguage($lang, $lang) }}</a><br>
@endforeach

我需要访问LanguageMiddleware.php 中的$languages 变量

master.blade.phplaravelProj/resources/views/layouts/

如何访问另一个类中的变量?

【问题讨论】:

    标签: php class oop laravel laravel-5


    【解决方案1】:

    这是简单的 php 东西。将属性设置为static 并使用:: 访问它。

    class LanguageMiddleware {
        public static $languages = ['en','es','fr','de','pt','pl','zh','ja'];
    }
    
    @foreach (App\Http\Middleware\LanguageMiddleware::$languages as $lang)
        ...
    @endforeach
    

    不过,您不应该在中间件中使用它。您最好使用该数组添加配置(即在 /config/app.php 中),并使用 Config::get 访问它。

    【讨论】:

    • 其次:如果需要在中间件之外访问语言,则将它们从中间件移出到双方都可以访问的地方。
    • 我知道这可能看起来很简单,但我只是发现了这些东西并试图以正确的方式去做。感谢您提供有关 Config::get 的提示...这当然是我应该做的!
    【解决方案2】:

    最好的方法是让一个类具有可以在其范围之外访问的函数。我通常在这里做这样的事情:

    在app目录下你可以新建一个目录(例如libs),

    LanguageMiddleware.php放在那里,

    class LanguageMiddleware{
     static function languages($lang){
       //Do your languages code here
    }
    }
    

    app/start/global.php 中添加pp_path().'/libs' 给你addDirectories, 然后在composer.json 中将"app/libs" 添加到autoLoad 数组中。

    在您的刀片模板中,您可以执行以下操作:

    @foreach(LanguageMiddleware::languages($lang))
      <a class=\"setLang\" href=\"lang/en\">{{ Locale::getDisplayLanguage($lang, $lang) }}</a><br>
    @endforeach
    

    通过这种方式,现在可以在项目中的任何位置调用该类及其函数。

    【讨论】:

      猜你喜欢
      • 2020-11-17
      • 2016-01-08
      • 2014-09-05
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 2013-03-25
      • 1970-01-01
      相关资源
      最近更新 更多