【问题标题】:Laravel - Class filter.parser does not existLaravel - 类 filter.parser 不存在
【发布时间】:2013-10-15 18:27:03
【问题描述】:

我已经辞职升级到 Laravel 4.1.x(composer.json 为我安装了它,所以我更新了 Antonio Carlos Ribeiro 提到的控制器别名),但现在有一个不同的问题:

编辑:在克隆了一个新的 Laravel 存储库后,我在 Adam Rivers 发布的帖子中进行了全新安装(在复制了我所拥有的少量公共文件之后),它现在可以工作了。

    [2013-10-11 21:25:58] production.ERROR: exception 'ErrorException' with message 'Attempt to assign property of non-object' in /path/to/laravel/app/controllers/HomeController.php:22
Stack trace:
#0 /path/to/laravel/app/controllers/HomeController.php(22): Illuminate\Exception\Handler->handleError(2, 'Attempt to assi...', '/path/to/laravel...', 22, Array)
#1 [internal function]: HomeController->Index()
#2 /path/to/laravel/bootstrap/compiled.php(5574): call_user_func_array(Array, Array)
#3 /path/to/laravel/bootstrap/compiled.php(5562): Illuminate\Routing\ControllerDispatcher->call(Object(HomeController), Object(Illuminate\Routing\Route), 'Index')
#4 /path/to/laravel/bootstrap/compiled.php(4901): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), 'HomeController', 'Index')
#5 [internal function]: Illuminate\Routing\Router->Illuminate\Routing\{closure}()
#6 /path/to/laravel/bootstrap/compiled.php(5155): call_user_func_array(Object(Closure), Array)
#7 /path/to/laravel/bootstrap/compiled.php(4925): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request))
#8 /path/to/laravel/bootstrap/compiled.php(4914): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#9 /path/to/laravel/bootstrap/compiled.php(548): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#10 /path/to/laravel/bootstrap/compiled.php(532): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
#11 /path/to/laravel/public/index.php(49): Illuminate\Foundation\Application->run()
#12 {main} [] []

代码在哪里:

<?php

class HomeController extends BaseController {

    /*
    |--------------------------------------------------------------------------
    | Default Home Controller
    |--------------------------------------------------------------------------
    |
    | You may wish to use controllers instead of, or in addition to, Closure
    | based routes. That's great! Here is an example controller method to
    | get you started. To route to this controller, just add the route:
    |
    |   Route::get('/', 'HomeController@showWelcome');
    |
    */

    protected $layout = 'layouts.master';

    public function Index()
    {
        $this->layout->content = View::make('home'); //This is line 22
    }

}

我的BaseController

<?php

class BaseController extends Controller {

        /**
         * Setup the layout used by the controller.
         *
         * @return void
         */
        protected function setupLayout()
        {
                if ( ! is_null($this->layout))
                {
                        $this->layout = View::make($this->layout);
                }
        }

}

我的routes.php

<?php

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the Closure to execute when that URI is requested.
|
*/

Route::get('/', 'HomeController@Index');

老问题:

我一直在 WAMP 上开发 Laravel 4.0.x,并将我的网站部署到我的 LEMP 堆栈。但是,我一直遇到这个错误:

[2013-10-09 01:20:00] log.ERROR: exception 'ReflectionException' with message 'Class filter.parser does not exist' in /path/to/laravel/bootstrap/compiled.php:165
Stack trace:
#0 /path/to/laravel/bootstrap/compiled.php(165): ReflectionClass->__construct('filter.parser')
#1 /path/to/laravel/bootstrap/compiled.php(142): Illuminate\Container\Container->build('filter.parser', Array)
#2 /path/to/laravel/bootstrap/compiled.php(442): Illuminate\Container\Container->make('filter.parser', Array)
#3 /path/to/laravel/bootstrap/compiled.php(233): Illuminate\Foundation\Application->make('filter.parser')
#4 /path/to/laravel/vendor/laravel/framework/src/Illuminate/Routing/Controllers/Controller.php(104): Illuminate\Container\Container->offsetGet('filter.parser')
#5 /path/to/laravel/bootstrap/compiled.php(4755): Illuminate\Routing\Controllers\Controller->callAction(Object(Illuminate\Foundation\Application), Object(Illuminate\Routing\Router), 'Index', Array)
#6 [internal function]: Illuminate\Routing\Router->Illuminate\Routing\{closure}()
#7 /path/to/laravel/bootstrap/compiled.php(7824): call_user_func_array(Object(Closure), Array)
#8 /path/to/laravel/bootstrap/compiled.php(7811): Illuminate\Routing\Route->callCallable()
#9 /path/to/laravel/bootstrap/compiled.php(4766): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request))
#10 /path/to/laravel/bootstrap/compiled.php(481): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#11 /path/to/laravel/bootstrap/compiled.php(470): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
#12 /path/to/laravel/public/index.php(49): Illuminate\Foundation\Application->run()
#13 {main} [] []

当我删除我的路线时,基本上是

Route::get('/', 'HomeController@Index');

错误消息改为未找到。不确定这是否意味着什么,但我认为错误消息与路由有关。

我能想到的唯一区别是composer包(我什至尝试直接复制vendor文件夹)或PHP版本(WAMP上的5.4.12,LEMP上的5.4.19)。

我尝试用谷歌搜索类名,但我只找到了一个已关闭的 github 问题的结果。谁能帮我找出问题所在?

作为参考,我使用的 Laravel 版本与 github 上的 master 分支相同 - https://github.com/laravel/laravel

删除/path/to/laravel/bootstrap/compiled.php后我更新的错误

 [2013-10-11 20:12:38] log.ERROR: exception 'ReflectionException' with message 'Class filter.parser does not exist' in /path/to/laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php:296
 Stack trace:
 #0 /path/to/laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php(296): ReflectionClass->__construct('filter.parser')
 #1 /path/to/laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php(238): Illuminate\Container\Container->build('filter.parser', Array)
 #2 /path/to/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(425): Illuminate\Container\Container->make('filter.parser', Array)
 #3 /path/to/laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php(468): Illuminate\Foundation\Application->make('filter.parser')
 #4 /path/to/laravel/vendor/laravel/framework/src/Illuminate/Routing/Controllers/Controller.php(104): Illuminate\Container\Container->offsetGet('filter.parser')
 #5 /path/to/laravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php(985): Illuminate\Routing\Controllers\Controller->callAction(Object(Illuminate\Foundation\Application), Object(Illuminate\Routing\Router), 'Index', Array)
 #6 [internal function]: Illuminate\Routing\Router->Illuminate\Routing\{closure}()
 #7 /path/to/laravel/vendor/laravel/framework/src/Illuminate/Routing/Route.php(80): call_user_func_array(Object(Closure), Array)
 #8 /path/to/laravel/vendor/laravel/framework/src/Illuminate/Routing/Route.php(47): Illuminate\Routing\Route->callCallable()
 #9 /path/to/laravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php(1016): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request))
 #10 /path/to/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(522): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
 #11 /path/to/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(497): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
 #12 /path/to/laravel/public/index.php(49): Illuminate\Foundation\Application->run()
 #13 {main} [] []

我对 Laravel 安装所做的明显更改:

app/start/global.php结尾

-require app_path().'/filters.php';
+require app_path().'/filters.php';
+
+ClassLoader::register(new ClassLoader(array(
+    app_path().'/libraries',
+)));
+
+App::bind('html', function() {
+    return new HTML;
+});

【问题讨论】:

  • 删除你的文件/path/to/laravel/bootstrap/compiled.php,再试一次,请用新的替换当前的错误信息。
  • @AntonioCarlosRibeiro 完成,该文件的目的仅仅是充当缓存吗?
  • @xiankai 是的,它只是用作缓存
  • 你可以试试更新吗? composer update
  • @devo 我刚刚尝试过,发生了最奇怪的错误 - [2013-10-11 21:12:25] log.ERROR: exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Class 'PDO' not found' in /path/to/laravel/app/config/database.php:16 其中第 16 行是 'fetch' =&gt; PDO::FETCH_CLASS,

标签: php laravel laravel-4


【解决方案1】:

删除 bootstrap/compiled.php 文件。这应该会有所帮助。

【讨论】:

    【解决方案2】:

    你的新问题:

    您的基本控制器似乎存在问题。确保您的基本控制器如下所示:

    <?php
    
    class BaseController extends Controller
    {
        /**
         * Setup the layout used by the controller.
         *
         * @return void
         */
        protected function setupLayout()
        {
            if ( ! is_null($this->layout))
            {
                $this->layout = View::make($this->layout);
            }
        }
    }
    

    【讨论】:

    • 我已经用它替换了app/config/app.php 中的配置,但结果差异实际上显示一行已被删除 - 'Illuminate\Remote\RemoteServiceProvider',并且您列表中的那些已经全部存在。跨度>
    • 不走运,这是一个相对较新的 Laravel 安装,只有最低配置。 composer dump-autoload 给了消息 Generating autoload files 但没有改变。
    • 再试一次,但先删除内容供应商目录,然后删除composer.lock,然后运行composer install --prefer-source而不是第一步。
    • 显然在重新安装我的composer.json 后,我似乎拥有了4.1 版本的 Laravel。我现在有一个新的不相关的错误......呵呵。但我确实发现我上次对我的安装进行了更改,这可能是官方 repo 被误导的一部分。我已经更新了我的问题以反映这一点。感谢您迄今为止的帮助!
    • 你用什么路由来调用你的控制器?
    【解决方案3】:

    您是否从 4.1 移回 4.0?

    您可能需要检查您的 app/config/app.php 是否有此服务提供商:

    'Illuminate\Routing\ControllerServiceProvider',
    

    正如亚当里弗斯所说,它可能不存在。

    同时检查您的别名:

    适用于 4.0

    'Controller'      => 'Illuminate\Routing\Controllers\Controller',
    

    适用于 4.1

    'Controller'      => 'Illuminate\Routing\Controller',
    

    编辑:

    关于您的新问题,请检查您的 BaseController 是否至少如下所示:

    <?php
    
    class BaseController extends Controller {
    
        /**
         * Setup the layout used by the controller.
         *
         * @return void
         */
        protected function setupLayout()
        {
            if ( ! is_null($this->layout))
            {
                $this->layout = View::make($this->layout);
            }
        }
    
    }
    

    【讨论】:

    • 我确实回滚到4.0(因为它删除了对控制器路由的支持),我的别名中的条目是4.0 的条目。本来应该是 4.1 的可能性不大,我尝试更改它,但改成了 'ErrorException' with message 'Class 'Illuminate\Routing\Controller' not found' in /path/to/laravel/vendor/laravel/framework/src/Illuminate/Foundation/AliasLoader.php:64
    • 编辑以猜测您的新问题。看起来 setupLayout() 没有被调用。
    • 不幸的是,BaseController 看起来与您粘贴的完全一样 - 我没有修改它。不过,我已经添加了完整的堆栈跟踪。调试 Laravel 真是太痛苦了。
    猜你喜欢
    • 2016-06-30
    • 2021-02-03
    • 2016-02-24
    • 2014-02-09
    • 1970-01-01
    • 2021-05-27
    • 2015-12-22
    • 2021-04-21
    • 2015-09-29
    相关资源
    最近更新 更多