cakephp - 如何设置从控制器传递到视图的变量的默认值?

时间:2017-04-11 10:40:14

标签: php variables cakephp view controller

我还是CakePHP的新人 我有一个控制器,当满足某些条件时设置变量“V1” 现在,我想让这个“V1”有一个默认值''或null我没有设置它所以cakephp不会发出通知“错误:变量'V1'没有设置”。
我在视图中尝试了<?= $V1 = '' ?>但这导致“V1”在我在控制器之前设置之前始终为空。 问题:我应该忽略此通知还是有办法为从Controller传递给View的变量设置默认值?或者还有其他方法吗?

谢谢你:D

3 个答案:

答案 0 :(得分:1)

这应该有效

    <?= isset($v1)?$v1:''?>

编辑:修复结束标记

答案 1 :(得分:1)

  

问题:我应该忽略此通知还是有办法为从Controller传递给View的变量设置默认值?或者还有其他方法吗?

所有通知和警告都应该修复 - 始终,没有例外。不这样做会导致在应用程序中调试问题。不修复它们只是不好的做法。因此,要么确保始终设置变量,要么在视图中检查它。

在控制器中执行此操作将确保始终将其设置为默认值为AppBundle的视图。

<?php
class jpen_Category_List_Widget extends WP_Widget {
  // php classnames and widget name/description added
  function __construct() {
    $widget_options = array(
      'classname' => 'jpen_category_list_widget',
      'description' => 'Add a nicely formatted list of categories to your sidebar.'
    );
    parent::__construct( 
      'jpen_category_list_widget', 
      'Simple Blog Theme Category List', 
      $widget_options 
    );
  }
  // create the widget output
  function widget( $args, $instance ) {
    
    $title = apply_filters( 'widget_title', $instance[ 'title' ] );
    $categories = get_categories( array(
      'orderby' => 'name',
      'order'   => 'ASC'
      ) );
    $cat_count = 0;
    $cat_col_one = [];
    $cat_col_two = [];
    foreach( $categories as $category ) {
      $cat_count ++;
      $category_link = sprintf( 
          '<li class="list-unstyled"><a href="%1$s" alt="%2$s">%3$s</a></li>',
          esc_url( get_category_link( $category->term_id ) ),
          esc_attr( sprintf( __( 'View all posts in %s', 'textdomain' ), $category->name ) ),
          esc_html( $category->name )
      );
      if ($cat_count % 2 != 0 ) {
        $cat_col_one[] = $category_link;
      } else {
        $cat_col_two[] = $category_link;
      }
    }
    echo $args['before_widget'] . $args['before_title'] . $title . $args['after_title'];
    ?><div class="row">
      <div class="col-lg-6"><?php
        foreach( $cat_col_one as $cat_one ) {
          echo $cat_one;
        } ?>
      </div>

      <div class="col-lg-6"><?php 
        foreach( $cat_col_two as $cat_two ) {
          echo $cat_two;
        } ?>
      </div>

    </div><?php
    echo $args['after_widget'];
  }
  function form( $instance ) { 
    $title = ! empty( $instance['title'] ) ? $instance['title'] : ''; ?>
    <p>
      <label for="<?php echo $this->get_field_id( 'title' ); ?>">Title:</label>
      <input type="text" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr( $title ); ?>" />
    </p>
    <p>This widget displays all of your post categories as a two-column list (or a one-column list when rendered responsively).</p>
  <?php }
  // Update database with new info
  function update( $new_instance, $old_instance ) { 
    $instance = $old_instance;
    $instance[ 'title' ] = strip_tags( $new_instance[ 'title' ] );
    return $instance;
  }
}
// register the widget
function jpen_register_widgets() { 
  register_widget( 'jpen_Category_List_Widget' );
}
add_action( 'widgets_init', 'jpen_register_widgets' );
////////////////////
add_theme_support('menu');
function register_newtheme_menu(){
    register_nav_menus(
            array(
                'main-menu'=>_('Main Menu')
            )
    );
    
}

add_action('init','register_newtheme_menu');


function add_menuclass($ulclass) {
   return preg_replace('/<a /', '<a class="navigation-link w-nav-link" ', $ulclass);
}
add_filter('wp_nav_menu','add_menuclass');

function theme_prefix_setup() {
	
	add_theme_support( 'custom-logo', array(
		'height'      => 100,
		'width'       => 400,
		'flex-width' => true,
	) );

}
add_action( 'after_setup_theme', 'theme_prefix_setup' );

?>

带有coalescing operator的php7。

null

但是,我更喜欢这里的三元运算符,因为它比合并运算符 - 恕我直言更好。

答案 2 :(得分:1)

只是添加到burzum的答案。如果您正在使用PHP 7,您还可以在控制器中使用空合并运算符: -

$this->set('v1', $v1 ?? null);

有关详细信息,请参阅PHP docs