【问题标题】:Class not found exception in a route of slim framework在苗条框架的路线中找不到类异常
【发布时间】:2016-08-22 21:12:09
【问题描述】:

我从 Slim+eloquent+twig 开始(使用此演示文稿http://slides.com/revul/slimframework)并收到此错误:

 Type: Error 
 Message: Class 'Localizacao' not found 
 File: /Users/Bigua/Sites/salas/src/routes.php 
 Line: 19 

我正在尝试列出表格中的所有内容并将其传递给我的视图。命令“composer update”没有返回任何问题。

这是我的代码:

Composer.json:

{
"name": "slim/slim-skeleton",
"description": "A Slim Framework skeleton application for rapid development",
"keywords": ["microframework", "rest", "router", "psr7"],
"homepage": "http://github.com/slimphp/Slim-Skeleton",
"license": "MIT",
"authors": [{
    "name": "Josh Lockhart",
    "email": "info@joshlockhart.com",
    "homepage": "http://www.joshlockhart.com/"
}],
"require": {
    "php": ">=5.5.0",
    "slim/slim": "^3.1",
    "monolog/monolog": "^1.17",
    "illuminate/database": "~5.1",
    "slim/twig-view": "^2.1"
},
"autoload": {
    "psr-4": {
        "App/Models\\": "app/models"
    }
}

路线

$app->get('/sala/add', function ($request, $response, $args) {
    $this->logger->info("Slim-Skeleton '/salas/add' route");
    // Render index view
    $args['locais'] = Localizacao::all();
    $this->logger->info("locais" . $args);
    return $this->renderer->render($response, 'add_sala.html.twig', $args);
})->setName('sala_add');

型号

<?php
  namespace App\Models;

  use Illuminate\Database\Eloquent\Model as Eloquent;

  class Localizacao extends Eloquent {
    protected $table = 'localizacao';

    protected $primaryKey = 'id_local';
    public $timestamps    = false;
  }

我在这里阅读了许多类似的主题,在我看来这是命名空间的问题,但我只是不明白它的错误所在。对不起,如果这是一个菜鸟问题。

[已解决]

解决方案遵循@marcin-nabiałek 和@geggleto 的两个答案:

修复了psr-4:

"psr-4": {
    "App\\Models\\": "app/models"
}

并正确使用命名空间:

  \App\Models\Localizacao::all()

Tnx 很多!!!

【问题讨论】:

  • 感谢添加的标签@marcin =)

标签: php routes namespaces eloquent slim


【解决方案1】:

您的 PSR-4 自动加载作曲家条目不正确

"psr-4": {
    "App/Models\\": "app/models"
}

应该是

"psr-4": {
    "App\\Models\\": "app/models"
}

【讨论】:

    【解决方案2】:

    问题在于Localizacao 位于App\Models 命名空间中,而您使用的是routes.php

    Localizacao::all()
    

    没有任何命名空间,因此假定它来自全局命名空间。

    您可以将其替换为:

    \App\Models\Localizacao::all()
    

    或像以前一样使用它,但在文件顶部添加:

    use App\Models\Localizacao;
    

    【讨论】:

      【解决方案3】:

      Let Make things clear here,这个错误的原因是因为你为你的psr-4使用的名字和你在你的控制器类中声明的名字不一样:例如:

       "autoload-dev": {
              "psr-4": {
                  "{name you will like to use for your name space here, that will represent your application name e.g any name here (App) for instance}\\": "the directory you will like to load your asset,library, routes,middle-ware etc e.g like app or src/"
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2015-06-09
        • 2015-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-01
        • 2012-12-04
        相关资源
        最近更新 更多