Как я могу иметь контроллер администратора в Magento и использовать его в phhtml для загрузки файла - PullRequest
2 голосов
/ 13 мая 2019

Я новичок в PHP и Magento, у меня есть плагин, который имеет меню администратора, которое ссылается на страницу.То, что я хочу сделать, это добавить контроллер администратора для загрузки файла на сервер со страницы.это моя структура:

  • MyPlugin / KnownUser / Controller / Adminhtml / Admin / Index.php

    <?php
    namespace MyPlugin\KnownUser\Controller\Adminhtml\Admin;
    require_once( __DIR__ .'../../../../IntegrationInfoProvider.php');
    use \DateTime;
    
      class Index extends \Magento\Backend\App\Action
      {
        /**
        * @var \Magento\Framework\View\Result\PageFactory
        */
        protected $resultPageFactory;
        public function __construct(
         \Magento\Backend\App\Action\Context $context,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory) 
    {
    
         parent::__construct($context);
         $this->resultPageFactory = $resultPageFactory;
    
    }
    
    public function execute()
    {           
        $configProvider = new \MyPlugin\KnownUser\IntegrationInfoProvider();
        $configText =  $configProvider->getIntegrationInfo(true);
        $customerIntegration = json_decode($configText, true);
    
        $resultPage = $this->resultPageFactory->create();
        $layout = $resultPage->getLayout();
        $block = $layout->getBlock('main_panel');
        $block->setAccountId($customerIntegration["AccountId"]);
        $block->setVersion($customerIntegration["Version"]);
        $block->setPublishDate($customerIntegration["PublishDate"]);
        $block->setUploadUrl($this->getUrl('knownuser/admin/process/index'));   
        $block->setIntegrationConfig( $configText);
        return $resultPage;
    
    }   
    
    }
    
    • MyPlugin \ knownuser \ view \ adminhtml \шаблоны \ admin.phtml

      <p>
          <label style="width:200px">Publisher</label>
          <br />
          <input readonly type="text" value="<?php echo $this->getAccountId() ?>"> </input>
      </p>
      <p>
          <label style="width:100px">Version</label>
          <br />
          <input readonly type="text" value="<?php echo $this->getVersion() ?>">
          </input>
      </p>
      <p>
          <label style="width:100px">Publish Date</label>
          <br />
          <input readonly type="text" value="<?php echo $this->getPublishDate() ?
          >" > </input>
      </p>
      <p>
          <label style="width:100px">IntegrationdedConfig</label>
      </p>
      
      <textarea rows="10" cols="200" readonly>
      <?php echo $this->getIntegrationConfig() ?>
            </textarea>
      
      <form id='form' method="post" enctype="multipart/form-data">
          <input type="file" name="files[]" multiple>
          <input type="submit" value="Upload File" name="submit">
      </form>
      <script>
      
          const url = '<?php echo $this->getUploadUrl()?>';
          alert(url);
          const form = document.getElementById('form');
      
          form.addEventListener('submit', e => {
              e.preventDefault();
              const files = document.querySelector('[type=file]').files;
              const formData = new FormData();
      
              for (let i = 0; i < files.length; i++) {
                  let file = files[i];
      
                  formData.append('files[]', file);
              }
              debugger;
              fetch(url, {
                  method: 'POST',
                  body: formData
              }).then(response => {
                  console.log(response);
              });
          });
      </script>

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

  • MyPlugin \ knownuser \ Controller \ Adminhtml \ Process

      <?php
      namespace MyPlugin\KnownUser\Controller\Adminhtml\Admin;
      class Index extends \Magento\Framework\App\Action\Action
      {
         public function execute()
        {           
    
           die('test index');
           echo('just for sure it has been ran');
        }   
    
      } 
    
...