【问题标题】:Laravel don't triger to ComposerServiceProvider ClassLaravel 不会触发 ComposerServiceProvider 类
【发布时间】:2021-01-01 18:00:22
【问题描述】:

我在 ComposerServiceProvider 文件的 boot 方法中放置的“view()->share(...)”不起作用。但是当我把它放在 AppServiceProvider 中时它可以工作。我还在 app.php 文件的“providers”部分添加了 ComposerServiceProvider。

错误:

ErrorException
Undefined variable: test (View: /Users/devtools/Projects/sites/laravel/resources/views/components/backend/sidebar/menu-list.blade.php)
http://localhost/tr/admin/settings

可能是什么问题?感谢您的帮助。

它们是我的代码:

namespace App\Providers;
use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider
{
    // ...

    public function boot()
    {
        // This code works when I put it in AppServiceProvider.php
        view()->composer('*', function ($view) {
            view()->share('test', 'deneme');
        });
    }
}

config/app.php

// ...
'providers' => [
  /*
   * Application Service Providers...
   */
   App\Providers\ComposerServiceProvider::class,
],

routers/web.php

Route::prefix(LaravelLocalization::setLocale() . "/admin")
    ->name('admin.')
    ->middleware(['localeSessionRedirect', 'localizationRedirect', 'localize', 'auth', 'verified'])
    ->group(function ()
    {
        Route::get('/', function () {
            return view('backend.home');
        })->name('home');
    });

composer.json

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": [
        "framework",
        "laravel"
    ],
    "license": "MIT",
    "require": {
        "php": "^7.2.5|^8.0",
        "fideloper/proxy": "^4.4",
        "fruitcake/laravel-cors": "^2.0",
        "guzzlehttp/guzzle": "^6.3.1|^7.0.1",
        "laravel/framework": "^7.29",
        "laravel/tinker": "^2.5",
        "laravel/ui": "^2.4",
        "mcamara/laravel-localization": "^1.6"
    },
    "require-dev": {
        "almasaeed2010/adminlte": "~3.0",
        "facade/ignition": "^2.0",
        "fakerphp/faker": "^1.9.1",
        "mockery/mockery": "^1.3.1",
        "nunomaduro/collision": "^4.3",
        "phpunit/phpunit": "^8.5.8|^9.3.3"
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    }
}

如您所见,这些是文件名和路径

解决方案:

问题是我删除了“数据”文件夹 “存储/框架/缓存/”。当我运行“php artisan cache:clear” 命令,它给出了一个错误。我添加了文件夹,没关系。

【问题讨论】:

  • 您是否缓存了您的配置?为此,您将使用视图共享而不是作曲家
  • 嗨@lagbox!非常感谢您的回答。但是,问题是我删除了“storage/framework/cache/”中的“data”文件夹。当我运行“php artisan cache:clear”命令时,它给出了一个错误。我添加了文件夹,没关系。谢谢你。 :)

标签: php laravel laravel-7


【解决方案1】:

试试这个:

    View::composer('*', function($view)
    {
        $view->share('test', 'deneme');
    });

别忘了添加这个:

use View;

【讨论】:

  • 嗨@S.Kashizadeh,谢谢你的回答。但是,这行不通。实际上 ComposerServiceProvider::boot() 方法根本不起作用。
  • 你确定 ComposerServiceProvider 在 composer autoload 中加载了吗??
  • 还有 view()->share('test', 'deneme');必须是 $view->share('test', 'deneme');
  • 我不确定您所说的作曲家自动加载到底是什么意思?我该如何检查?
  • 打开终端运行,composer dump-autoload 刷新自动加载器。然后看看会发生什么,也将 view() 更改为 $view。
猜你喜欢
  • 2013-11-30
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多