Проблема: я пытаюсь загрузить фреймворк L4 для использования некоторых файлов (рабочие процессы php-resque в app/workers), но рабочие, похоже, не могут найти класс DB в строке, которая использовала DB::table('tablename').... composer dumpautoload не помогает.

Не загружал ли я классы начальной загрузки DB? Казалось, что рабочие классы загрузились.

Ошибка начальной загрузки L4

<?php

// Bootstrap the laravel environment for our resque workers.
require __DIR__.'/bootstrap/autoload.php';

ошибка

PHP Fatal error:  Class 'DB' not found in /var/www/dev/app/libraries/test.php on line 50

composer.json

{
    "require": {
        "laravel/framework": "4.0.*",
        "chrisboulton/php-resque": "@stable"
    },
    "autoload": {
        "classmap": [
            "app/commands",
            "app/controllers",
            "app/models",
            "app/database/migrations",
            "app/database/seeds",
            "app/tests/TestCase.php",
            "app/libraries",
            "app/workers"
        ]
    },
    "scripts": {
        "post-update-cmd": "php artisan optimize"
    },
    "minimum-stability": "dev"
}
0
Nyxynyx 25 Мар 2013 в 07:10

1 ответ

Лучший ответ

Вы можете попробовать:

1) Загрузите файл автозагрузки Composer, расположенный в vendor/autoload.php (на самом деле вы вызываете файл laravel)

2) Реплицируйте вызовы в файле public/index.php в вашем файле test.php, а именно:

require __DIR__.'/../bootstrap/autoload.php';
$app = require_once __DIR__.'/../bootstrap/start.php';
$app->run();
$app->shutdown();

Изменить: после дальнейшего осмотра вы можете попробовать сделать это с помощью голого миниума:

<?php
require '../vendor/autoload.php';
use Illuminate\Support\Facades\DB as DB;
// Test the DB Instance
$dbInstance = new DB;
var_dump ($dbInstance);

Выведет

object(Illuminate\Support\Facades\DB)[2]
0
Antonio Frignani 26 Мар 2013 в 13:23
1
Не могли бы вы объяснить цель выполнения $app->run(), затем $app-shutdown()
 – 
Nyxynyx
25 Мар 2013 в 21:43
По сути, объект $app, возвращаемый директивой require_once, возвращает экземпляр Illuminate\Foundation\Application.
 – 
Antonio Frignani
25 Мар 2013 в 22:29
Извините, комментарий был усечен, я писал: ..... omissis .... Если вы заглянете внутрь этого класса (/vendor/laravel/framework/src/Illuminate/Foundation/Application.php), вы ' Вы увидите, что метод run (~ строка 446) отвечает за отправку запроса в массив маршрутизатора. После дальнейшего изучения оказалось, что вы можете просто require_once '<path to>/vendor/autoload.php'; // load the composer autoload require_once '<path to>/bootstrap/start.php'; // Test the DB Instance $dbInstance = new DB; var_dump ($dbInstance);, чтобы загрузить его без начальной загрузки всего фреймворка.
 – 
Antonio Frignani
25 Мар 2013 в 22:44
У меня похожие проблемы. Не могли бы вы взглянуть на stackoverflow.com/questions/20527586/…
 – 
arrowill12
12 Дек 2013 в 00:30