Laravel控制器由于ClassLoader和不正确的composer文件而加载文件


Laravel Controller load files due to ClassLoader and incorrect composer files

好的,Laravel的新手。我用composer下载了laravel。它创建了一个目录结构,就像。。。

  vendor'laravel'laravel'app
  vendor'laravel'laravel'bootstrap
  vendor'laravel'laravel'public
  vendor'laravel'framework'....
  vendor'laravel'laravel'composer.json

以及许多其他供应商和laravel目录。

以及我最初的composer.json文件在根目录中的位置。

我把vendor ''lavel''lavel目录的内容移到了顶层,这样我就有了一个目录结构,比如。。。

   app'...
   bootstrap'...
   public'...
   vendor'laravel'framework'...
   composer.json
   vendor' many other directories...

我更新了index.php目录,以便它引用bootstrap''autoload.php和bootstrap''start.php目录的新位置。

我可以加载index.php,得到Laravel图像图,表示一切正常。

所以,现在我去修改routes.php为…

Route::controller('home', 'HomeController');

并尝试加载主目录。我明白错误。。。

"include(D:'dev'wamp'www'ltest3'vendor/laravel/laravel/app/controllers/BaseController.php): failed to open stream: No such file or directory"

问题是vendor''comporter''autoload_classmap.php仍然有旧的laravel''app控制器映射。例如

return array(
    'BaseController' => $vendorDir . '/laravel/laravel/app/controllers/BaseController.php',
    'DatabaseSeeder' => $vendorDir . '/laravel/laravel/app/database/seeds/DatabaseSeeder.php',
    'HomeController' => $vendorDir . '/laravel/laravel/app/controllers/HomeController.php',

而不是/app/controllers/的新位置

如果我试图在根目录中的composer.json上运行composer更新,经过一段时间的处理后会出现错误。。。

 Failed to execute git status --porcelain --untracked-files=no        

所以,不知道如何让composer更新自动加载类映射以使用我的新目录位置。

人们通常会将vendor ''lavel''lavel目录留在原来的位置吗?

似乎作曲家可能会再次尝试更新laravel目录,但不确定,因为我收到了错误。

这是我在根目录中的完整composer.json。这是一个最初在vendor ''lavel''lavel目录中,由其他最初的composer运行创建的,也许这是个问题。

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "require": {
        "laravel/framework": "4.1.*"
    },
    "autoload": {
        "classmap": [
            "app/commands",
            "app/controllers",
            "app/models",
            "app/database/migrations",
            "app/database/seeds",
            "app/tests/TestCase.php"
        ]
    },
    "scripts": {
        "post-install-cmd": [
            "php artisan clear-compiled",
            "php artisan optimize"
        ],
        "post-update-cmd": [
            "php artisan clear-compiled",
            "php artisan optimize"
        ],
        "post-create-project-cmd": [
            "php artisan key:generate"
        ]
    },
    "config": {
        "preferred-install": "dist"
    },
    "minimum-stability": "stable"
}

所有供应商文件,无论属于Laravel还是第三方,都应位于同一位置/供应商。这不仅仅是引导程序中的映射问题,而且对于您需要更新composer中的任何包时,这一点非常重要。你可能需要在一个微妙的环境中这样做,为什么不保持它应该是什么样子呢?有原因吗?

Composer用于许多其他框架,我相信在所有这些框架中都需要一个供应商目录。

由于Cryode和user2094178指出我的目录结构一开始就不正确,所以它能正常工作。我将讨论我遇到的几个问题,希望能帮助其他可能有同样问题的人。fyi,这是在运行WAMP的Windows7上。

我认为问题的症结在于,我试图通过创建一个需要laravel的composer.json文件来安装Laravael。当运行composer时,它不知道我想要Laravel作为我的主要项目框架,所以它只是把所有的Laravel都安装在供应商目录中。没有顶级应用程序、引导程序、公用目录等。

已取消此安装,并按照中指定的说明从头开始http://geekanddummy.com/how-to-laravel-4-tutorial-part-1-installation/(例如,运行composer创建项目laravel/laravel)。遇到以下问题。。。

1) composer/git抱怨https问题。composer继续在每次下载时发出警告,但继续使用http下载文件。当它到达symfphony filesystem.git时,它得到了一个致命的错误

Failed to clone git@github.com:symfony/Filesystem.git via git, https, ssh protocols, aborting

为了解决这个问题,我运行了一个输出phpinfo()的小php脚本。确定了我的php.ini文件的位置,并删除了"extension=php_openssl.dll"的注释。我已经为WAMP和Apache做了这件事,但发现php在命令行使用了不同的php.ini

2) 使用"ssh"对git和ssl进行了测试git@github.com"在命令行。出现无法进行身份验证的问题,权限被拒绝。添加了环境变量HOME,将其设置为..

设置HOME=%HOMEPATH%

之后,ssh工作并成功地为github添加了一个ssh密钥。

3) 删除了整个项目目录并从头开始,看不到恢复和继续的方法。下一个问题是,我在检索symfony/Filesystem.git时收到一个git错误"超过了300秒的超时"。通过添加以下composer环境变量修复了这个问题。。

 set COMPOSER_PROCESS_TIMEOUT=2000

4) 删除了整个项目并从头开始。这次下载得很好。我有顶级应用程序、引导程序、公共和供应商目录。加载laravel''public''index.php作品时,我看到了"You have arrival"页面。