読者です 読者をやめる 読者になる 読者になる

ITの隊長のブログ

ITの隊長のブログです。いや、まだ隊長と呼べるほどには至っていないけど、日々がんばります。CakePHPとPlayFrameworkを使って仕事しています。最近はAngular2をさわりはじめたお(^ω^ = ^ω^)

CakePHPのcompactって便利やね

CakePHP PHP

スポンサードリンク

ライブラリのコードをふらっと読んだとき。こんなコードを見つけた。

  • ~/lib/Cake/View/Helper/FormHelper.php
<?php

    // ~ 省略 ~
    // 1050行目ぐらい
    $out['input'] = $this->_getInput(compact('type', 'fieldName', 'options', 'radioOptions', 'selected', 'dateFormat', 'timeFormat'));

    $output = '';
    foreach ($format as $element) {
      $output .= $out[$element];
    }

    if (!empty($divOptions['tag'])) {
      $tag = $divOptions['tag'];
      unset($divOptions['tag']);
      $output = $this->Html->tag($tag, $output, $divOptions);
    }
    return $output;
  }

/**
 * Generates an input element
 *
 * @param array $args The options for the input element
 * @return string The generated input element
 */
  protected function _getInput($args) {
    extract($args);
    switch ($type) {
      case 'hidden':
        return $this->hidden($fieldName, $options);
      case 'checkbox':
        return $this->checkbox($fieldName, $options);
      case 'radio':
        return $this->radio($fieldName, $radioOptions, $options);
      case 'file':
        return $this->file($fieldName, $options);
      case 'select':
        $options += array('options' => array(), 'value' => $selected);
        $list = $options['options'];
        unset($options['options']);
        return $this->select($fieldName, $list, $options);
      case 'time':
        $options['value'] = $selected;
        return $this->dateTime($fieldName, null, $timeFormat, $options);
      case 'date':
        $options['value'] = $selected;
        return $this->dateTime($fieldName, $dateFormat, null, $options);
      case 'datetime':
        $options['value'] = $selected;
        return $this->dateTime($fieldName, $dateFormat, $timeFormat, $options);
      case 'textarea':
        return $this->textarea($fieldName, $options + array('cols' => '30', 'rows' => '6'));
      case 'url':
        return $this->text($fieldName, array('type' => 'url') + $options);
      default:
        return $this->{$type}($fieldName, $options);
    }
  }

注目したのはこのコード。

<?php

$out['input'] = $this->_getInput(compact('type', 'fieldName', 'options', 'radioOptions', 'selected', 'dateFormat', 'timeFormat'));

んで、呼び先は

<?php
  protected function _getInput($args) {
    extract($args);
    switch ($type) {
      case 'hidden':

ここでは引数は$argsと記述されて、extract()で変数化している。

複数あるとき、メソッドの引数のカッコの中が長くなりがちだけど、こんな書き方もいいなと思った。