运行时错误- Laravel 5.0,不能重新声明类AppmodelsCategory



我最近将我的项目从laravel 4.2升级到laravel 5.0,并且遇到了几个错误。

在4.2版本中我没有定义任何名称空间,但是按照这里的建议,

我已经开始在代码中定义名称空间。我不知道我现在面临的问题是否与此有关,但它发生在这个过程的中间。

在运行代码时,我得到以下错误:

exception 'SymfonyComponentDebugExceptionFatalErrorException' with
message 'Cannot redeclare class AppmodelsCategory' in  
/Users/yash/summers/lightsCameraDinner/lcd_updated/app/models/Category.php:19

这是我的Category.php:

<?php namespace Appmodels;
use Eloquent;
class Category extends Eloquent {
  protected $table = 'categories';
  protected $guarded = array('id');
  // Defining 'Many to Many' Relationship with 'VendorProfile' Model
  public function clients() {
    return $this->belongsToMany('Client');
  }
  // Defining 'One to Many' Relationship with 'Job' Model
  public function jobs() {
    return $this->hasMany('Job');
  }
}

我在SO上搜索了类似的错误,但没有找到。

这是我的控制器中在"/"路由上调用的函数。

    public function getIndex() {
    $categories = Category::all();
    $messages = Message::groupBy('receiver_id')
                ->select(['receiver_id', DB::raw("COUNT('receiver_id') AS total")])
                ->orderBy('total', 'DESC')
                ->get()
                ->toArray();
    $vendors_ids = array();
    foreach ($messages as $message) {
      $vendors_ids[] = $message['receiver_id'];
    }
    $clients = Client::where('profile_type', 'VendorProfile')
                      ->where('is_activated', 1)
                      ->whereIn('id', $vendors_ids)
                      ->limit(4)
                      ->get();
    if($clients->count() < 4) {
      $clients = Client::where('profile_type', 'VendorProfile')
                        ->where('is_activated', 1)
                        ->limit(4)
                        ->get();
    }   
    Log::info('getIndex function of PagesController');
    $this->layout = View::make('layouts.homepage');
    $this->layout->content = View::make('pages/index', ['categories' => $categories, 'clients' => $clients]);
    return $this->layout;
  }

如果您需要代码中的其他内容,请告诉我。我已经想了好长一段时间了

这是因为您已经生成了一个控制器,然后将其拖放到子文件夹中。您需要将名称空间更改为正确的名称空间,或者正确生成控制器。

php artisan make:controller Api/CategoryController  

或将名称空间更改为

namespace AppHttpControllersApi;

(如果API是控制器所在文件夹的名称)

我知道这个问题很老了,但我将回答对我有效的方法。我最近在一个git分支上测试了Laravel 4.2到5.0的升级。我在一个名为Megaloquent的模型类中遇到了同样的问题,它在Laravel 4.2中扩展了Eloquent,现在是Model.

因为一开始我想让它在没有命名空间的情况下工作,所以我在composer.json的类映射中添加了app/子目录

"autoload": {
    "classmap": [
        "database",
        "app/Http/Controllers",
        "app/Http/Controllers/Auth",
        "app/Models",
        "app/Libraries"
    ],
    "psr-4": {
        "App\": "app/"
    }
},

在让它工作之后遇到了很多麻烦,我决定在控制器和模型中使用命名空间,我发现现在更结构化和精确。你应该从classmap中删除app/Controllers-Models-Libraries,因为psr-4已经加载了app/{子目录}/classes中的所有类,而classmap自动加载会让它发生两次。删除它们后,您将只得到这个

"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\": "app/"
    }
},

这是你无法真正控制的Laravel内部配置,但是删除它们已经为我修复了错误。

相关内容

  • 没有找到相关文章

最新更新