CakePHP более эффективный способ установки пустых переменных из модели в поле зрения - PullRequest
1 голос
/ 05 апреля 2011

Рассмотрим такой код в CakePHP:

$query =  $this->find('first'...);

, который производит этот массив:

[UserAddress] => Array
    (
        [address_name] => Abc 55 Avenue
        [address_id] => 6
        [country_id] => 9
        [city_id] => 35
        [Country] => Array
            (
                [country_name] => 'China'
            )
    [City] => Array
        (
            [city_name] => Null
        )
)

$this->set('data', $query);

Теперь, если я использую название города в виде, как:

echo $this->data['UserAddress']['City']['city_name']; 

Я получу «уведомление», потому что название города не установлено. Может кто-нибудь предложить более эффективные способы установить 'unset' переменных в '' (пустая строка), чем писать везде

echo isset($this->data['UserAddress']['address_name']) ? $this->data['UserAddress']['address_name'] : '';

для нулевых значений в массивах, полученных из запросов модели?
Спасибо.

Ответы [ 3 ]

4 голосов
/ 05 апреля 2011

Согласно этому существующему вопросу , в PHP 5.3 есть новый оператор, который может помочь:

echo $this->data['UserAddress']['City']['city_name'] ?: '';

Обратите внимание, что это, кажется, вам хорошо, только если ключ существует вмассив.Некоторые примеры:

$test = null;
echo $test ?: 'default';  // will print 'default'

$test = array();
echo $test['x'] ?: 'default';  // displays notice 'undefined index', prints 'default'

$test = array('x' => null);
echo $test['x'] ?: 'default';  // will print 'default' 
1 голос
/ 05 апреля 2011

Используйте обратные вызовы модели.

В функции afterFind проверьте переменные, которые вам нужно установить из NULL в значение "".

<?php
    // IN THE MODEL FOR UserAddress
    public function afterFind( array $results, bool $primary ){
        if( !isset( $results[ $this->alias ][ 'City' ][ 'city_name' ] )){
            $results[ $this->alias ][ 'City' ][ 'city_name' ] = "";
        }
        ...
    }        
?>

Вы можете даже абстрагировать его доповедение или сделать так, чтобы он зацикливался на массиве данных, фиксируя нулевые значения в строках.

Посмотрите здесь функции обратного вызова (Модели)

http://book.cakephp.org/#!/view/1048/Callback-Methods

ИЛИ посмотрите наметоды обратного вызова здесь (контроллеры)

http://book.cakephp.org/#!/view/984/Callbacks

0 голосов
/ 05 апреля 2011

вы можете попробовать это:

echo @$this->data['UserAddress']['City']['city_name'];

если значение установлено, то оно напечатает его ..
если нет, оно ничего не напечатает и проигнорирует уведомление ..

надеюсь, это поможет ...

удачи в вашем развитии ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...