• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.

XF 2.0 Exporting through a service, an entity called "service"... lol

Jaxel

Well-known member
#1
So one of my data types in my Rio addon is called "service". I am trying to export a service's data to XML. I'm trying to do this through the XF Service system... but I'm having a bug that I can't figure out. I think I may be getting lost somewhere because of the inherent confusion of exporting a data type called "service", through a system called "service".

My controller action:
Code:
    public function actionExport(ParameterBag $params)
    {
        $service = $this->assertServiceExists($params->service_id);
       
        $this->setResponseType('xml');
        $exporter = $this->service('EWR\Rio:ServiceExport', $service);

        $viewParams = [
            'xml' => $exporter->exportToXml(),
            'filename' => $exporter->getExportFileName()
        ];
        return $this->view('EWR\Rio:ServiceExport', '', $viewParams);
    }
And this is my service:
Code:
namespace EWR\Rio\Service\ServiceExport;

use EWR\Rio\Entity\Service;

class ServiceExport extends \XF\Service\AbstractService
{
    protected $service;
   
    public function __construct(Service $service)
    {
        parent::__construct($app);
        $this->setService($service);
    }

    public function setService(Service $service)
    {
        $this->service = $service;
    }

    public function getExportFileName()
    {
        $title = str_replace(' ', '-', utf8_romanize(utf8_deaccent($this->service->service_name)));
        return "{$title}.xml";
    }

    public function exportToXml()
    {
        $document = new \DOMDocument('1.0', 'utf-8');
        $document->formatOutput = true;
       
        $topNode = $document->createElement('service');
        $topNode->appendChild($document->createElement('name', $service->service_name));
        $topNode->appendChild($document->createElement('bbcode', $service->service_bbcode));
        $topNode->appendChild($document->createElement('callback', $service->service_callback));
       
        $document->appendChild($topNode);
       
        return $document;
    }
}
When I execute the action however, I get the following error:
LogicException: Class EWR\Rio\Service\ServiceExport does not exist in src/XF/Container.php at line 267

  1. XF\Container->createObject() in src/XF/App.php at line 1318
  2. XF\App->XF\{closure}() in src/XF/Container.php at line 228
  3. XF\Container->create() in src/XF/App.php at line 2456
  4. XF\App->service()
  5. call_user_func_array() in src/XF/Mvc/Controller.php at line 699
  6. XF\Mvc\Controller->service() in src/addons/EWR/Rio/Admin/Controller/Service.php at line 67
  7. EWR\Rio\Admin\Controller\Service->actionExport() in src/XF/Mvc/Dispatcher.php at line 249
  8. XF\Mvc\Dispatcher->dispatchClass() in src/XF/Mvc/Dispatcher.php at line 89
  9. XF\Mvc\Dispatcher->dispatchLoop() in src/XF/Mvc/Dispatcher.php at line 41
  10. XF\Mvc\Dispatcher->run() in src/XF/App.php at line 1879
  11. XF\App->run() in src/XF.php at line 328
  12. XF::runApp() in admin.php at line 13
 

DragonByte Tech

Well-known member
#2
The word "Service" appears so many times in your post the word has lost all meaning :p

The problem is the namespace most likely. Try this: namespace EWR\Rio\Service;


Fillip