Consider such code in CakePHP:
$query = $this->find('first'...);
That produces this array:
[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);
Now if I use city name in the view like:
echo $this->data['UserAddress']['City']['city_name'];
I'll get a 'notice' because city_name isn't set. Can anyone suggest more efficient ways to set 'unset' varia开发者_如何学运维bles to '' (empty string) than writing everywhere
echo isset($this->data['UserAddress']['address_name']) ? $this->data['UserAddress']['address_name'] : '';
for null values in arrays got from model queries?
Thanks.According to this existing question, in PHP 5.3 there is a new operator which might help:
echo $this->data['UserAddress']['City']['city_name'] ?: '';
Note that this seems to only do you good if the key exists in the array. Some examples:
$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'
Use the Model callbacks.
In the afterFind function check for the variables you need to set from NULL to a "" value.
<?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' ] = "";
}
...
}
?>
You could even abstract it out to a behavior or have it loop over the data array fixing nulls to strings.
Take a look at the callback functions here (Models)
http://book.cakephp.org/#!/view/1048/Callback-Methods
OR look at the callback methods here (Controllers)
http://book.cakephp.org/#!/view/984/Callbacks
you can try this:
echo @$this->data['UserAddress']['City']['city_name'];
if the value is set, then it will print it..
if not, it will print nothing, and will ignore the notice..
hope this helps...
good luck with your development...
精彩评论