2012-03-23 16 views
0

ユーザーが完全なURLを入力するとき..i youtube id ... presgmatchのみを保存したい場合は、ビデオIDを調べて抽出し、データベースに保存します。このpregmatchチェックを行い、ユーチューブにid前入力フィールドをcakephpに保存する前に一致させる方法

を助けるための完全なURLに 感謝を保存抽出する方法//これはvideos_controllerに()関数を追加している、これはadd.ctpファイルをある//

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

      $this->Video->create(); 

      if ($this->Video->save($this->data)) { 
       $this->Session->setFlash(__('The Video has been saved', true)); 
       $this->redirect(array('action' => 'admin_index')); 
      } else { 
       $this->Session->setFlash(__('The Video could not be saved. Please, try again.', true)); 
      } 
     } 
     $vcats = $this->Video->Vcat->find('list'); 
     $this->set(compact('vcats')); 
    } 

<div class="videos form"> 
    <?php // echo $this->Form->create('Image');?> 
    <?php echo $form->create('Video'); ?> 
    <fieldset> 
     <legend><?php __('Add Video'); ?></legend> 
     <?php 
     echo $this->Form->input('vcat_id'); 
     echo $this->Form->input('title'); 
     $url= $this->Form->input('link'); 
     echo $url 
     ?> 
    </fieldset> 
    <?php echo $this->Form->end(__('Submit', true)); ?> 
</div> 
<div class="actions"> 
    <h3><?php __('Actions'); ?></h3> 
    <ul> 

     <li><?php echo $this->Html->link(__('List Videos', true), array('action' => 'index')); ?></li> 
     <li><?php echo $this->Html->link(__('List Vcats', true), array('controller' => 'vcats', 'action' => 'index')); ?> </li> 
     <li><?php echo $this->Html->link(__('New Vcat', true), array('controller' => 'vcats', 'action' => 'add')); ?> </li> 
    </ul> 
</div> 

//私たちは、私はそれのためのより良い場所があると思い、パターンを照合することによって、URLからのユニークな動画IDを取得しますが、私は合うようにこのコードを置く場所前

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

     $this->Video->create(); 
     $url = $this->data['Video']['link']; 

     /*assuming you have a column `id` in your `videos` table 
     where you want to store the id, 
     replace this if you have different column for this*/ 

     preg_match("/v=([^&]+)/i", $url, $matches); 
     $this->data['Video']['id'] = $matches[1]; 

     //rest of the code 
    } 
} 

答えて

1

を保存モデルのbeforeSaveまたはbeforeValidateメソッドで:

class Video extends AppModel { 

    ... 

    public function beforeSave() { 
     if (!empty($this->data[$this->alias]['link'])) { 
     if (preg_match("/v=([^&]+)/i", $this->data[$this->alias]['link'], $matches)) { 
      $this->data[$this->alias]['some_id_field'] = $matches[1]; 
     } 
     } 
     return true; 
    } 

    ... 

} 
0

にここ

preg_match("/v=([^&]+)/i", $url, $matches); 
$id = $matches[1]; 
関連する問題