【问题标题】:Getting error on laravel AppServiceProviderlaravel AppServiceProvider 出错
【发布时间】:2016-08-21 04:18:27
【问题描述】:

我正在学习 laravel 5.2 并尝试按照视频教程制作一个 cms 项目。我创建了如下文件-

app/View/Composers/InjectPages.php

namespace App\View\Composers;

use App\Page;
use Illuminate\View\View;

class InjectPages
{
    protected $pages;

    public function __construct(Page $pages)
    {
       $this->pages = $pages;
    }

    public function compose(View $view)
    {
        $pages = $this->pages->all()->toHierarchy();

        $view->with('pages', $pages);
    }
}

app/Providers/AppServiceProvider.php

public function boot()
{
    $this->app['view']->composer('layouts.frontend', Composers\InjectPages::class);
}

资源/视图/welcome.blade.php

@extends('layouts.frontend')

@section('title', 'Welcome')

@section('heading', 'This is a heading')

@section('content')

    <h1>Hello World</h1>

@endsection

public/themes/views/layouts/frontend.blade.php

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>@yield('title') &mdash; Tuts24.com</title>

    <link rel="stylesheet" type="text/css" href="{{ theme('css/frontend.css') }}">
</head>
<body>
    <nav class="navbar navbar-default">
        <div class="container">
            <div class="navbar-header">
                <a class="navbar-brand">
                    <img src="{{ theme('images/logo.png') }}" alt="Tuts24.com">
                </a>
            </div>
            <ul class="nav navbar-nav">
                @include('partials.navigation')
            </ul>
        </div>
    </nav>

    <div class="container">
        <div class="row">
            <div class="col-md-12">
                @yield('content')
            </div>
        </div>
    </div>
</body>
</html>

public/themes/views/partials/navigation.blade.php

@foreach($pages as $page)
<li class="{{ Request::is($page->uri_wildcard) ? 'active' : '' }} {{ count($page->children) ? ($page->isChild() ? 'dropdown-submenu' : 'dropdown') : '' }}">
    <a href="{{ url($page->uri) }}">
        {{ $page->title }}
        @if(count($page->children))
            <span class="caret {{ $page->child() ? 'right' : '' }}"></span>
        @endif
    </a>

    @if(count($page->children))
        <ul class="dropdown-menu">
            @include('partials.navigation', ['pages' => $page->children])
        </ul>
    @endif
</li>
@endforeach

但总是出现以下错误。

Container.php 第 734 行中的错误异常: 类 App\Providers\Composers\InjectPages 不存在(查看:/path/to/project/resources/views/welcome.blade.php)

我不确定,这些信息是否足以为您找出错误。如果需要更多信息,请告诉我。 期待你的回复。谢谢。

更新-

经过多次尝试作为答案,在我看来,以下文件也与此错误有关。这就是为什么我还要添加此代码并共享我的学习项目的保管箱链接。

app/View/ThemeViewFinder.php

<?php

namespace App\View;

use Illuminate\View\FileViewFinder;

class ThemeViewFinder extends FileViewFinder
{
protected $activeTheme;

protected $basePath;

public function setBasePath($path)
{
    $this->basePath = $path;
}

public function setActiveTheme($theme)
{
    $this->activeTheme = $theme;

    array_unshift($this->paths, $this->basePath.'/'.$theme.'/views');
}
}

Dropbox 链接 https://www.dropbox.com/sh/v8n1qvix20hywmo/AABVcs8DqvEhI89lw98mbxbya?dl=0

【问题讨论】:

  • 我已经尝试过 AppServiceProvider.php 上的 App\View\Composers\InjectPages::class。这次我得到 Class App\Providers\App\View\Composers\InjectPages 不存在。一件事,My InjectPages.php 位于 View 文件夹中。但不是在 Providers 文件夹中搜索吗?

标签: laravel laravel-5 laravel-5.2


【解决方案1】:

试试这个:

composer('layouts.frontend', '\App\View\Composers\InjectPages::class');

另外,尝试运行composer dumpauto 命令。

【讨论】:

  • 现在,出现此错误 - Class App\View\Composers\InjectPages::class does not exist 但文件存在
  • 你确定你在app\View\Composers 目录中有InjectPages.php(你应该仔细检查一下)?您是否尝试运行composer dumpauto?另外,尝试运行composer dumpauto -o,如果没有帮助,请删除bootstrap\cache\services.php 并再次运行composer dumpauto
  • 我已经删除了前一个并再次创建了 InjectPages.php 并按照您所说的做了一切。这一次我忘了创建我的 app/View/ThemeViewFinder.php ,这是我创建的一个教程,但出现了一个新错误。似乎这个错误也与这个文件有关。我也在我的问题中添加了这个文件的代码。
【解决方案2】:

看看

composer('layouts.frontend', '\App\View\Composers\InjectPages');

composer('layouts.frontend', \App\View\Composers\InjectPages::class);

【讨论】:

    【解决方案3】:

    尝试将以下代码添加到composer.json中

    composer.json

    "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        },
        "files":[
                "app/View/Composers/InjectPages.php"
        ]
    },
    

    执行:composer dump-autoload

    在:app/Providers/AppServiceProvider.php

     public function boot()
      {
        view()->composer(
            'layouts.frontend', 'App\View\Composers\InjectPages'
        );
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 2020-03-26
      • 2016-05-20
      • 1970-01-01
      • 2016-09-19
      相关资源
      最近更新 更多