【问题标题】:Where to put HTML macros in laravel 5?在 laravel 5 中将 HTML 宏放在哪里?
【发布时间】:2015-04-05 08:56:08
【问题描述】:

在 laravel 4 中,我曾经有在多个视图中使用的 HTML 宏,例如:

HTML::macro('minipics', function($pic)
{
    //
}

为此,我在 /app 文件夹中有一个 macros.php 文件。我找不到在 laravel 5 中放置宏的位置。我应该为此使用“macroable”功能吗?

编辑:

我最终使用了@include(),并为其赋予了所需的值。

@include('shared.minipics', $mpics = $ppics)
@include('shared.minipics', $mpics = $randpics)

【问题讨论】:

    标签: macros laravel-5


    【解决方案1】:

    你可以像在 Laravel 4 中那样做。

    将您的macros.php 文件放在/app 文件夹中。

    然后在您的composer.json 中执行此操作

    "autoload": {
            "classmap": [
                "database"
            ],
            "psr-4": {
                "App\\": "app/"
            },
            "files": [
                "app/macros.php"  <-- Put this here
            ]
        },
    

    【讨论】:

    • 我尝试在宏文件中添加use Html;,但仍然得到“PHP 致命错误:第 4 行 /srv/.....macros.php 中未找到类 'Html' ”。我必须以某种方式加载课程吗?
    • 是的 - 它在此处的升级指南中列出 - laravel.com/docs/5.0/upgrade#upgrade-5.0 - 向下滚动到“表单和 HTML 助手”
    • 我之前已经安装了“Form & HTML Helpers”,就像在链接中一样。那已经奏效了。只是因为我在 composer.json 中添加了“app/macros.php”,当我运行composer update 时,我得到一个白屏和 cli 输出“PHP 致命错误:在 /srv/http/site5/ 中找不到类 'Html' app/macros.php 在第 3 行"。这就是为什么我想,macros.php 中可能缺少一些namespaceuse。该类是相同的 (Html),在 aliases 数组和 macros.php 中使用小写字母。该应用程序已命名,并且该名称也存在于 composer.json (psr-4) 中。
    • 试试\Html::macro('...?
    • 改成\Html::macro('..并移到下面1行看是否'read',但是:php artisan optimize PHP Fatal error: Class 'Html' not found in /srv/http/site5/app/macros.php on line 4:(composer dump-autoload不会抛出错误,但是composer update同样的错误作为工匠命令
    【解决方案2】:

    我已将我的宏移动到“resources/macros/...”目录中,因为我认为它们属于所有其他与视图相关的代码。为了加载它们,我使用了一个看起来像这样的服务提供者:

    <?php namespace App\Providers;
    
    use Illuminate\Support\ServiceProvider;
    
    class MacroServiceProvider extends ServiceProvider {
    
        /**
         * Bootstrap the application services.
         *
         * @return void
         */
        public function boot()
        {
            require base_path() . '/resources/macros/macro1.php';
            require base_path() . '/resources/macros/macro2.php';
            // etc...
        }
    
        /**
         * Register any application services.
         *
         * @return void
         */
        public function register()
        {
            //
        }
    
    }
    

    【讨论】:

    • 添加到这里,如果你在启动方法中使用以下内容:foreach(glob(base_path('resources/macros/*.macro.php')) as $filename){ require_once($filename); }你可以自动加载所有 .macro.php 文件,无需更新提供程序
    • 这种方法在 Laravel 5.1 中对我有用。谢谢。这让我发疯了。
    猜你喜欢
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多