2014-09-05 4 views
7

Я делаю проект с использованием Laravel 4.2, где мне нужно включить в контроллер файл PHP (библиотеку для преобразования PDF в текст), а затем вернуть переменная с текстом, любая идея как?Laravel 4.2: Включите PHP-файл (библиотеку) в контроллер

Это мой контроллер:

public function transform() { 
    include ('includes/vendor/autoload.php'); 
} 

И мой /app/start/global.php файл:

ClassLoader::addDirectories(array(
    app_path().'/commands', 
    app_path().'/controllers', 
    app_path().'/models', 
    app_path().'/database/seeds', 
    app_path().'/includes', 

)); 

И это ошибка:

include(includes/vendor/autoload.php): failed to open stream: No such file or directory 

ответ

4

Я думаю, что вы правы, но я нахожу другой способ, может быть, не правильный путь, но он работает.

как это, я создал новую папку с именем Включенные и поместить мои файлы там, то в /app/start/global.php я добавил эту строку:

require app_path().'/includes/vendor/autoload.php'; 

И теперь работает: D

16

Вы можете создать новый каталог где-то в каталоге приложения, например, app/libraries

Затем в файле composer.json, вы можете включить app/libraries в вашем автозагрузку classmap:

{ 
    "name": "laravel/laravel", 
    "description": "The Laravel Framework.", 
    "keywords": ["framework", "laravel"], 
    "license": "MIT", 
    "require": { 
     "laravel/framework": "4.2.*", 
    }, 
    "autoload": { 
     "classmap": [ 
      "app/commands", 
      "app/controllers", 
      "app/models", 
      "app/libraries", <------------------ YOUR CUSTOM DIRECTORY 
      "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", 
} 

не забудьте запустить composer dump-autoload после изменения вашего композитора.json.

Предположим, что ваше имя класса называется CustomClass.php, и оно находится в каталоге app/libraries (поэтому полный путь app/libraries/CustomClass.php). Если вы правильно разместили свой класс на своем классе, ваше соглашение, вероятно, будет иметь имя libraries. Для ясности мы будем называть наше пространство имен custom, чтобы избежать путаницы с каталогом.

$class = new \custom\CustomClass(); 

В качестве альтернативы, вы можете дать ему псевдоним в файле app/config/app.php:

/* 
|-------------------------------------------------------------------------- 
| Class Aliases 
|-------------------------------------------------------------------------- 
| 
| This array of class aliases will be registered when this application 
| is started. However, feel free to register as many as you wish as 
| the aliases are "lazy" loaded so they don't hinder performance. 
| 
*/ 

'aliases' => array(
    ... 
    'CustomClass' => 'custom\CustomClass', 
    ... 
) 

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

$class = new CustomClass(); 

Надеюсь, это поможет!

+0

Я добавил '" app/libraries "' в мой класс для компоновки composer.json autoload-> classmap. Затем я добавил 'TextCleaner => 'libraries \ TextCleaner' в свои псевдонимы app/config/app.php. Я попытался создать экземпляр класса, например '$ imageCleaner = new \ libraries \ TextCleaner()' И как '$ imageCleaner = new TextCleaner();' и обе ошибки для меня говорят, что класс не существует. Да, я успешно выполнил автозагрузку композитора. –

+0

@BillGarrison Убедитесь, что у вас есть имена, размещенные на вашем классе. Предположим, что ваше пространство имен для вашего класса называется «помощниками» («помощники пространства имен» в верхней части вашего класса). В файле config/app.php вы должны включить его как ''TextCleaner' => 'helpers \ TextCleaner''. Я отредактировал оригинальный ответ, чтобы помочь уточнить. – eluong

+0

помог мне сегодня :) +1 –

Смежные вопросы