をクリックした後にゼロになる私のルートです:urlパラメータは、ここでボタン
'router' => array(
'routes' => array(
'upload' => array(
'type' => 'segment',
'options' => array(
'route' => '/products/upload[/:products]',
'defaults' => array(
'controller' => 'Products\Controller\Upload',
'action' => 'index'
),
),
'may_terminate' => true,
'child_routes' => array(
'uploadsuccessful' => array(
'type' => 'literal',
'options' => array(
'route' => '/uploadsuccessful',
'defaults' => array(
'controller' => 'Products\Controller\Upload',
'action' => 'successful'
),
),
),
),
),
),
);
私は別の[/:products]
パラメータを与える別のビュースクリプトからこのルートを複数回呼び出すしようとしています。
<a href="<?php echo $this->url('upload', array('products' =>'shoes')); ?>">Upload Shoes Product Image</a>
<a href="<?php echo $this->url('upload', array('products' =>'trainers')); ?>">Upload Trainers Product Image</a>
<a href="<?php echo $this->url('upload', array('products' =>'hats')); ?>">Upload Hat Product Image</a>
ここは私のコントローラコードです。私は$fileManagerDir
に指定された名前の別のフォルダを作ってみました各[/:products]
パラメータについて:
<?php
namespace Products\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Products\Form\UploadForm;
class UploadController extends AbstractActionController
{
protected $_dir = null;
public function indexAction()
{
$products = $this->params()->fromRoute('products');
$config = $this->getServiceLocator()->get('Config');
$fileManagerDir =$config['file_manager']['dir'];
$this->_dir = realpath($fileManagerDir) .
DIRECTORY_SEPARATOR .
$products;
if (!is_dir($this->_dir)) {
//read, write, execute
mkdir($this->_dir, 0777);
}
$form = new UploadForm($this->_dir, 'upload-form');
$request = $this->getRequest();
if ($request->isPost()) {
$post = array_merge_recursive(
$request->getPost()->toArray(),
$request->getFiles()->toArray()
);
$form->setData($post);
if ($form->isValid()) {
$data = $form->getData();
$this->setFileNames($data);
return $this->redirect()->toRoute('upload/uploadsuccessful', array('products' =>$products));
}
}
return new ViewModel(array('form' => $form));
}
public function successfulAction()
{
$file = array();
$flashMessenger = $this->flashMessenger();
if ($flashMessenger->hasMessages()) {
foreach($flashMessenger->getMessages() as $key => $value) {
$file = $value;
}
}
return new ViewModel(array('file' => $file));
}
protected function setFileNames($data)
{
unset($data['submit']);
foreach ($data['image-file'] as $key => $file) {
rename($file['tmp_name'], $this->_dir . DIRECTORY_SEPARATOR . $file['name']);
}
}
}
私はアイデアは明らかだと思います。
しかし、問題があります。ボタンをクリックすると($request->isPost() == true)
のパラメータ$products
がnull
になり、アップロードされたファイルは適切なフォルダに移動しません。また、私は成功したアクションにリダイレクトすることができません - $ productsがnullのため、エラーは "パラメータがありません"と表示されます。