0

こんにちは、ファイル アップロード フォームを作成しました。[送信] を押しても Uploads/add.ctp にリダイレクトされませんが、ファイルはディレクトリとデータベースに保存されます。実際、リダイレクトをアップロード/ブラウズに向けても、アップロード/ブラウズにはなりません。

これは私のコントローラーです

public function add() {

if(!empty($this->data)){

    $file = $this->request->data['Upload']['file'];
if ($file['error'] === UPLOAD_ERR_OK && $this->Upload->save($this->data)){
    $this->Upload->save($this->data);
    if(move_uploaded_file($file['tmp_name'],APP.'webroot/files/uploads'.DS.$this->Upload->id.'.mp4')) {
    $this->Session->setFlash(__('<p class="uploadflash">The upload has been saved</p>', true));
    $this->redirect(array('controller'=>'Uploads','action' => 'add'));
    } else{

    $this->Session->setFlash(__('<p class="uploadflash">The upload could not be saved. Please, try again.</p>', true));

    }
} 


}
}

そしてこれが私の形です

      <div class="maincontent">
      <?php echo $this->Form->create('Upload', array('type' => 'file', 'class'=>'uploadfrm'));?>
<fieldset class='registerf'>
    <legend class='registerf2'>Upload a Video</legend>
<?php
    echo 'Upload your video content here, there is no size limit however it is       <b>.mp4</b> file format only.';
    echo '<br/>';
    echo '<br/>';
    echo $this->Form->input('name', array('between'=>'<br />', 'class'=>'input'));
    echo $this->Form->input('eventname', array('between'=>'<br />'));
    echo $this->Form->input('description', array('between'=>'<br />', 'rows'=> '7', 'cols'=> '60'));
    echo  $this->Form->hidden('userid', array('id' => 'user_id','value' => $auth['id']));
    echo $this->Form->hidden('username', array('id' => 'username', 'value' => $auth['username']));
    echo $this->Form->input('file', array('type' => 'file'));
    echo "<br/>"
?>
<?php echo $this->Form->end(__('Submit', true));?>
</fieldset>

     <?php

   class UploadsController extends AppController {
   public $name = 'Uploads';

      public $helpers = array('Js');



// Users memeber area, is User logged in…
 public $components = array(
    'Session',
    'RequestHandler',
    'Auth'=>array(
        'loginRedirect'=>array('controller'=>'uploads', 'action'=>'browse'),
        'logoutRedirect'=>array('controller'=>'users', 'action'=>'login'),
        'authError'=>"Members Area Only, Please Login…",
        'authorize'=>array('Controller')
    )
  );


       public function isAuthorized($user) {
            // regular user can access the file uploads area
        if (isset($user['role']) && $user['role'] === 'regular') {
            return true;
             }

             // Default deny
                return false;
            }





function index() {
        $this->set('users', $this->Upload->find('all'));

}




// Handling File Upload Function and updating uploads database


    public function add() {

        if(!empty($this->data)){

            $file = $this->request->data['Upload']['file'];
            if ($file['error'] === UPLOAD_ERR_OK){
            $this->Upload->save($this->data); 
                if(move_uploaded_file($file['tmp_name'],APP.'webroot/files/uploads'.DS.$this->Upload->id.'.mp4')) 
                {
                    $this->redirect(array('controller' => 'Uploads', 'action' => 'add'));
                    $this->Session->setFlash(__('<p class="uploadflash">The upload has been saved</p>', true));


                    }   }else {

                        $this->Session->setFlash(__('<p class="uploadflash">The upload could not be saved. Please, try again.</p>', true));

                            }

                }
                }   

function browse () {
        // Find all in uploads database and paginates
$this->paginate = array(
    'limit' => 5    ,
    'order' => array(
        'name' => 'asc'
    )
    );
    $data = $this->paginate('Upload');
    $this->set(compact('data'));


     }

function recentuploads () {
$uploads =  $this->Upload->find('all', 
    array('limit' =>7,
    'order' => 
        array('Upload.date_uploaded' => 'desc')));
    if(isset($this->params['requested'])) { 
         return $uploads; 
         } 
            $this->set('uploads', $uploads); 
}

function watch ($id = null){
$this->set('isAjax', $this->RequestHandler->isAjax());

    // Read Uploads Table to watch video
    $this->Upload->id = $id;      
    $this->set('uploads', $this->Upload->read());



    // Load Posts Model for comments related to video
            $this->loadModel('Post');
    $this->paginate = array(
                'conditions' => array(
                'uploadid' => $id),
                'limit' => 4
                );

    $data = $this->paginate('Post');
    $this->set(compact('data'));






// Load Likes Model and retrive number of likes and dislikes

    $this->loadModel('Like');

    $related_likes = $this->Like->find('count', array(
        'conditions' => array('uploadid' => $id)
    ));
    $this->set('likes', $related_likes);
    }




}
    ?>

助言がありますか?

4

2 に答える 2

1

このadd関数はUploadsControllerにありますよね?そして、アップロード/閲覧にリダイレクトしたいですか?

UploadsControllerで、何に$name設定されていますか?

<?php
class UploadsController extends AppController {
   public $name = ?; // What is this variable set to?
}

Cake's Inflectorによると、リダイレクトでコントローラーを指定する場合は、小文字にする必要があります。

$this->redirect(array('controller' => 'uploads', 'action' => 'browse'));

または、指示元のアクションと指示するアクションが同じコントローラー内にある場合は、コントローラーを指定する必要もありません。たとえば、UploadsControllerからフォームを送信し、次の宛先add()にリダイレクトする場合browse()

$this->redirect(array('action' => 'browse'));

それを試して、それが役立つかどうかを確認してください。

また、関数で$ this-> Upload-> save($ this-> data)を2回呼び出していることに注意してくださいadd

public function add() {

    if(!empty($this->data)){
        $file = $this->request->data['Upload']['file'];
        if ($file['error'] === UPLOAD_ERR_OK && $this->Upload->save($this->data)) {
            $this->Upload->save($this->data);
            if(move_uploaded_file($file['tmp_name'],APP.'webroot/files/uploads'.DS.$this->Upload->id.'.mp4')) {
                $this->Session->setFlash(__('<p class="uploadflash">The upload has been saved</p>', true));
                $this->redirect(array('controller'=>'Uploads','action' => 'add'));
            } else {
                $this->Session->setFlash(__('<p class="uploadflash">The upload could not be saved. Please, try again.</p>', true));
            }
        }
    } 

}

具体的には、ここで:

if ($file['error'] === UPLOAD_ERR_OK && $this->Upload->save($this->data)) {
    $this->Upload->save($this->data);
    ...

条件で呼び出すとif、データはデータベースに保存されます。2番目のものを削除しても問題ありません。

于 2012-04-14T19:20:43.423 に答える
0

関数 add に次の行を追加すると、

            $this->render();

すべてが完全に機能します。他のすべてのビューがデフォルトでレンダリングされるのであれば、なぜビューをレンダリングする必要があるのか​​ を理解するのに苦労しています。しかし、とにかくうまくいきました!これが他の人に役立つことを願っています:)

于 2012-04-28T15:40:09.743 に答える