由于ClassLoader和错误的composer文件,Laravel Controller加载文件

时间:2014-04-25 01:31:46

标签: php laravel composer-php

好的,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 \ laravel \ laravel目录的内容移到了顶层,这样我的目录结构就像......

   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 \ composer \ autoload_classmap.php仍然有旧的laravel \ app控制器映射。 e.g。

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 update,经过一段时间的处理后会出错...

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

所以,不知道如何让作曲家更新自动加载类图以使用我的新目录位置。

人们通常会将vendor \ laravel \ laravel目录保留在原始位置吗?

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

这是我在根目录中的完整composer.json。这是最初在vendor \ laravel \ laravel目录中并由其他初始作曲家运行创建的那个,也许这就是问题。

{
    "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"
}

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

搞定了,感谢Cryode和user2094178指出我的目录结构不正确。我将讨论我遇到的几个问题,希望能帮助那些可能遇到同样问题的人。 fyi,这是在运行WAMP的Windows 7上。

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

废弃此安装并使用http://geekanddummy.com/how-to-laravel-4-tutorial-part-1-installation/中指定的指示从头开始(例如,运行composer create-project laravel / laravel)。归入以下问题......

1)composer / git抱怨https问题。作曲家在每次下载时都会继续发出警告,但继续使用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@github.com”测试了git和ssl。有一个无法验证的问题,权限被拒绝。添加了环境变量HOME,将其设置为..

设置HOME =%HOMEPATH%

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

3)删除整个项目目录并从头开始,没有看到恢复和继续的方法。下一个问题是,当检索symfony / Filesystem.git时,我得到了一个git错误“超过300秒的超时”。通过添加以下composer环境变量来解决此问题。

 set COMPOSER_PROCESS_TIMEOUT=2000

4)删除整个项目并从头开始。这次全部下载都很好。我有顶级应用程序,引导程序,公共和供应商目录。加载laravel \ public \ index.php有效,我看到“你已经到达”页面。