ipo*_*rto 3 php autoload classnotfound composer-php
错误是:
\n\nFatal error: Uncaught Error: Class \'Championsweb\\Model\\VO\\CompeticionVO\'\nnot found in E:\\Drive\\Proyectos\\ChampionsEclipse\\public\\CrearCompeticion.php\non line 4\nRun Code Online (Sandbox Code Playgroud)\n\n项目结构:
\n\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80config\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80public\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80css\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80js\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80vendor\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80src\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80Championsweb\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80Controller\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80Model\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80VO\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80templates\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80tests\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80vendor\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80composer\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80views\nRun Code Online (Sandbox Code Playgroud)\n\nCrearCompeticion.php(位于 public/ 中)如下所示:
\n\n<?php\n\nif (isset($_POST) && sizeof($_POST) > 0) {\n $competicionVO = new \\Championsweb\\Model\\VO\\CompeticionVO(\n $_POST[\'nombre\'],\n $_POST[\'anho\']\n );\n $adminactions = new \\Championsweb\\Controller\\AdminActions();\n $adminactions->crearCompeticion($competicionVO);\n}\n\nrequire \'../views/CrearCompeticion.view.php\';\nRun Code Online (Sandbox Code Playgroud)\n\nCompeticionVO.php(位于 src/Championsweb/Model/VO 中)如下所示:
\n\n<?php\nnamespace Championsweb\\Model\\VO;\n\nclass CompeticionVO {\n public $id;\n public $nombre;\n public $anho;\n public $idGanador;\n\n public function __construct($nombre, $anho) {\n $this->nombre = $nombre;\n $this->anho = $anho;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\nComposer.json 如下所示:
\n\n{\n "autoload" : {\n "classmap" : [\n "./"\n ]\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\nindex.php 有自动加载要求:
\n\n<?php\n\nrequire \'../vendor/autoload.php\';\nRun Code Online (Sandbox Code Playgroud)\n\nautoload_classmap.php 有 CompeticionVO 类:
\n\n<?php\n\n// autoload_classmap.php @generated by Composer\n\n$vendorDir = dirname(dirname(__FILE__));\n$baseDir = dirname($vendorDir);\n\nreturn array(\n \'Championsweb\\\\Controller\\\\Actions\' => $baseDir . \'/src/Championsweb/Controller/Actions.php\',\n \'Championsweb\\\\Controller\\\\AdminActions\' => $baseDir . \'/src/Championsweb/Controller/AdminActions.php\',\n \'Championsweb\\\\Controller\\\\UserActions\' => $baseDir . \'/src/Championsweb/Controller/UserActions.php\',\n \'Championsweb\\\\Model\\\\Db\' => $baseDir . \'/src/Championsweb/Model/Db.php\',\n \'Championsweb\\\\Model\\\\VO\\\\CompeticionVO\' => $baseDir . \'/src/Championsweb/Model/VO/CompeticionVO.php\',\n \'Championsweb\\\\Model\\\\VO\\\\EquipoVO\' => $baseDir . \'/src/Championsweb/Model/VO/EquipoVO.php\',\n \'Championsweb\\\\Model\\\\VO\\\\RondaVO\' => $baseDir . \'/src/Championsweb/Model/VO/RondaVO.php\',\n \'Championsweb\\\\Model\\\\VO\\\\UsuarioVO\' => $baseDir . \'/src/Championsweb/Model/VO/UsuarioVO.php\',\n \'ComposerAutoloaderInit91342042e1463ce66f1dcacb1f34d909\' => $vendorDir . \'/composer/autoload_real.php\',\n \'Composer\\\\Autoload\\\\ClassLoader\' => $vendorDir . \'/composer/ClassLoader.php\',\n \'Composer\\\\Autoload\\\\ComposerStaticInit91342042e1463ce66f1dcacb1f34d909\' => $vendorDir . \'/composer/autoload_static.php\',\n);\nRun Code Online (Sandbox Code Playgroud)\n\n基本上,CrearCompeticion.view.php 有一个通过 POST 传递到 CrearCompeticion.php 的表单。然后 CrearCompeticion.php 尝试使用表单信息创建 CompeticionVO 实例,但出现错误。
\n\n我究竟做错了什么?另外,我从一些教程中获得了composer.json 文件,但我不太了解它是如何工作的,但我很想了解。
\n\n提前致谢!
\n\n编辑:这就是 autoload_static.php 的样子:
\n\n<?php\n\n// autoload_static.php @generated by Composer\n\nnamespace Composer\\Autoload;\n\nclass ComposerStaticInit91342042e1463ce66f1dcacb1f34d909\n{\n public static $classMap = array (\n \'Championsweb\\\\Controller\\\\Actions\' => __DIR__ . \'/../..\' . \'/src/Championsweb/Controller/Actions.php\',\n \'Championsweb\\\\Controller\\\\AdminActions\' => __DIR__ . \'/../..\' . \'/src/Championsweb/Controller/AdminActions.php\',\n \'Championsweb\\\\Controller\\\\UserActions\' => __DIR__ . \'/../..\' . \'/src/Championsweb/Controller/UserActions.php\',\n \'Championsweb\\\\Model\\\\Db\' => __DIR__ . \'/../..\' . \'/src/Championsweb/Model/Db.php\',\n \'Championsweb\\\\Model\\\\VO\\\\CompeticionVO\' => __DIR__ . \'/../..\' . \'/src/Championsweb/Model/VO/CompeticionVO.php\',\n \'Championsweb\\\\Model\\\\VO\\\\EquipoVO\' => __DIR__ . \'/../..\' . \'/src/Championsweb/Model/VO/EquipoVO.php\',\n \'Championsweb\\\\Model\\\\VO\\\\RondaVO\' => __DIR__ . \'/../..\' . \'/src/Championsweb/Model/VO/RondaVO.php\',\n \'Championsweb\\\\Model\\\\VO\\\\UsuarioVO\' => __DIR__ . \'/../..\' . \'/src/Championsweb/Model/VO/UsuarioVO.php\',\n \'ComposerAutoloaderInit91342042e1463ce66f1dcacb1f34d909\' => __DIR__ . \'/..\' . \'/composer/autoload_real.php\',\n \'Composer\\\\Autoload\\\\ClassLoader\' => __DIR__ . \'/..\' . \'/composer/ClassLoader.php\',\n \'Composer\\\\Autoload\\\\ComposerStaticInit91342042e1463ce66f1dcacb1f34d909\' => __DIR__ . \'/..\' . \'/composer/autoload_static.php\',\n );\n\n public static function getInitializer(ClassLoader $loader)\n {\n return \\Closure::bind(function () use ($loader) {\n $loader->classMap = ComposerStaticInit91342042e1463ce66f1dcacb1f34d909::$classMap;\n\n }, null, ClassLoader::class);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
正如您所说,您将发布到CrearCompeticion.php位于 public/目录中的名为 的脚本。
这意味着在这种情况下,不会执行中存在的任何代码index.php(包括 ) 。require '../vendor/autoload.php';
因此,在您的情况下(您说您关注了 Laracast,但似乎没有使用 Laravel 应用程序设置),您还需要require __DIR__ . '/../vendor/autoload.php';在其之上添加CrearCompeticion.php,这应该可以完成工作。