I want to use https://github.com/box/spout library in my Yii project (in one of commands). I'm not using Composer, so I simple downloaded the extension and put in extensions/spout/Box/
.
In my config/main.php
I've added line
'import' => array(
...
'application.extensions.spout.*'
),
And in my command I've added following lines:
require_once Yii::app()->basePath . '/extensions/spout/Box/Spout/Reader/ReaderFactory.php';
require_once Yii::app()->basePath . '/extensions/spout/Box/Spout/Common/Type.php';
When I'm calling $reader = ReaderFactory::create(Type::CSV);
I'm getting following error:
PHP Error[2]: include(ReaderFactory.php): failed to open stream: No such file or directory
in file /srv/yii/YiiBase.php at line 421
#0 /srv/yii/YiiBase.php(421): autoload()
#1 unknown(0): autoload()
#2 /srv/dev/protected/commands/AmazonCommand.php(193): spl_autoload_call()
#3 unknown(0): AmazonCommand->actionIndex()
#4 /srv/yii/console/CConsoleCommand.php(172): ReflectionMethod->invokeArgs()
#5 /srv/yii/console/CConsoleCommandRunner.php(67): AmazonCommand->run()
#6 /srv/yii/console/CConsoleApplication.php(91): CConsoleCommandRunner->run()
#7 /srv/yii/base/CApplication.php(169): CConsoleApplication->processRequest()
#8 /srv/yii/yiic.php(33): CConsoleApplication->run()
#9 /srv/dev/protected/yiic.php(19): require_once()
#10 /srv/dev/protected/yiic(4): require_once()
What I'm missing? How can I use third party library in my project?
UPDATE
After that tutorial, I've moved spout
folder in protected/vendors
folder and changed the code following way:
Yii::import('application.vendors.spout.Box.Spout.Reader.*');
Yii::import('application.vendors.spout.Box.Spout.Common.*');
require_once 'ReaderFactory.php';
require_once 'Type.php';
Now I'm getting following error, still no clue why:
PHP Fatal error: Cannot redeclare class Box\Spout\Reader\ReaderFactory in /srv/dev/protected/vendors/spout/B
ox/Spout/Reader/ReaderFactory.php on line 17
If you are using Yii 2.0 and since Spout is PSR4 compliant, you can follow this guide: http://www.yiiframework.com/doc-2.0/guide-structure-extensions.html#installing-extensions-manually
If you are still using Yii 1.1, I am not sure what the best way to autoload your classes is. But you can still use a standard PSR4 autoloader:
Psr4Autoloader.php
Then add this code to your root file or wherever you think it's the most appropriate (just make sure the path for "require_once" is correct):
autoload.php
You should now be able to use Spout!