League\Csv\Writerクラスが使えない

170 views
Skip to first unread message

田中宏典

unread,
Oct 4, 2016, 7:50:57 PM10/4/16
to 日本Symfonyユーザー会
League/CsvをインストールしてWriterクラスを使用したのですが、次のエラーが発生してしまいます。
どうすればエラーを解決できるでしょうか?

【エラーメッセージ】
Attempted to load class "Writer" from namespace "League\Csv".
Did you forget a "use" statement for another namespace?
500 Internal Server Error - ClassNotFoundException

【環境】

Symfony version 3.1.4


【コンソール】

■League/Csvインストールコマンドの実行

$ /Applications/MAMP/bin/php/php5.6.10/bin/php ~/work/symfony-book/composer.phar require league/csv

Using version ^8.1 for league/csv

./composer.json has been created

Loading composer repositories with package information

Updating dependencies (including require-dev)

  - Installing league/csv (8.1.1)

    Downloading: 100%         

Writing lock file

Generating autoload files


【ソース】
■AdminInquiryListController.php
<?php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\Form\Extension\Core\Type\SearchType;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use AppBundle\Entity\Inquiry;
use League\Csv\Writer;
/**
 * @Route("/admin/inquiry")
 */
class AdminInquiryListController extends Controller
{
    /**
     * @Route("/search.{_format}",
     *      defaults={"_format": "html"},
     *      requirements={
     *          "_format": "html|csv",
     *      }
     *  )
     */
    public function indexAction(Request $request, $_format)
    {
        $form = $this->createSearchForm();
        $form->handleRequest($request);
        $keyword = null;
        if ($form->isValid()) {
            $keyword = $form->get('search')->getData();
        }
        $em = $this->getDoctrine()->getManager();
        $inquiryRepository = $em->getRepository('AppBundle:Inquiry');
        $inquiryList = $inquiryRepository->findAllByKeyword($keyword);
        if ($_format == 'csv') {
            $response = new Response($this->createCsv($inquiryList));
            $d = $response->headers->makeDisposition(
                ResponseHeaderBug::DISPOSITION_ATTACHMENT,
                'inquiry_list.csv'
            );
            $response->headers->set('Content-Disposition', $d);
            return $response;
        }
        return $this->render('Admin/Inquiry/index.html.twig',
            [
                'form' => $form->createView(),
                'inquiryList' => $inquiryList
            ]
        );
    }
    public function createSearchForm()
    {
        return $this->createFormBuilder()
            ->add('search', SearchType::class)
            ->add('submit', ButtonType::class, [
                'label' => '検索',
            ])
            ->getForm();
    }
    private function createCsv($inquiryList)
    {
        /** @var Writer $writer */
        $writer = Writer::createFromString('','');
        $writer->setNewLine("\r\n");
        foreach ($inquiryList as $inquiry) {
            /** @var Inquiry $inquiry */
            $writer->insertOne([
                $inquiry->getId(),
                $inquiry->getName(),
                $inquiry->getEmail()
            ]);
        }
        return (string)$writer;
    }
}

brtriver

unread,
Oct 4, 2016, 10:48:07 PM10/4/16
to symfony-users-ja
開発している環境のキャッシュが更新されていなくてクラスが見つからないとか?
php app/console cache:clear --env=prod

2016年10月5日 8:50 田中宏典 <toebisu...@gmail.com>:
> --
> --
> -------------------
> Symfonyに関する疑問・質問、ユーザー会の活動やサイトに対するご意見、その他雑談など、お気軽にMLへ投稿してください!
>
>
> 日本Symfonyユーザー会
> http://www.symfony.gr.jp/
>
> 日本Symfonyユーザー会メーリングリスト
> http://groups.google.com/group/symfony-users-ja
>
> ---
> このメールは Google グループのグループ「日本Symfonyユーザー会」に登録しているユーザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには
> symfony-users-...@googlegroups.com にメールを送信してください。
> その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

Hidenori GOTO

unread,
Oct 4, 2016, 11:20:44 PM10/4/16
to symfony-...@googlegroups.com
田中さん

後藤です


> ■League/Csvインストールコマンドの実行
>
> $ /Applications/MAMP/bin/php/php5.6.10/bin/php ~/work/symfony-book/composer.phar require league/csv
>
> Using version ^8.1 for league/csv
>
> ./composer.json has been created

この実行されたコマンドを見ると、プロジェクトのディレクトリ(symfony-book)とは違う場所でインストールを実行しているように見受けられます。
なので、プロジェクト内の vendor ディレクトリには league/csv ができていないと思います。(それでクラスが見つからないとなります)
プロジェクトに対してcomposerでライブラリを追加する場合は、プロジェクトディレクトリ配下へあらかじめ移動してから実行してみてください。
そうすると、symfony-bookプロジェクト配下のvendorディレクトリ内に、league/csv が作られるかと思います。


---------------------------------------------------------------
後藤秀宣
hideno...@gmail.com
---------------------------------------------------------------


2016年10月5日 8:50 田中宏典 <toebisu...@gmail.com>:

田中宏典

unread,
Oct 5, 2016, 7:38:14 PM10/5/16
to 日本Symfonyユーザー会
後藤さん
ありがとうございます!
composer.pharファイルをプロジェクト配下にコピーしてからインストールコマンドを実行することでうまく動作させることができました!
実行ファイルがある場所に対してインストーラが実行されるんですね、勉強になりました。
Reply all
Reply to author
Forward
0 new messages