mirror of
				https://github.com/yiisoft/yii2.git
				synced 2025-11-04 14:46:19 +08:00 
			
		
		
		
	Fixes #6106: Added ability to specify encode for each item of yii\widgets\Breadcrumbs
				
					
				
			This commit is contained in:
		@ -21,6 +21,7 @@ Yii Framework 2 Change Log
 | 
			
		||||
- Bug #6736: Removed `Content-Transfer-Encoding` from the list of default download headers (DaSourcerer)
 | 
			
		||||
- Enh #4502: Added alias support to URL route when calling `Url::toRoute()` and `Url::to()` (qiangxue, lynicidn)
 | 
			
		||||
- Enh #5194: `yii\console\controllers\AssetController` now handles bundle files from external resources properly (klimov-paul)
 | 
			
		||||
- Enh #6106: Added ability to specify `encode` for each item of `yii\widgets\Breadcrumbs` (samdark)
 | 
			
		||||
- Enh #6247: Logger and error handler are now using slightly less memory (stepanselyuk, samdark)
 | 
			
		||||
- Enh #6398: Added support for specifying dependent component in terms of a configuration array for classes such as `DbCache` (qiangxue)
 | 
			
		||||
- Enh #6434: Added `yii\behaviors\SluggableBehavior::immutable` to support keeping the generated slug unchanged (trntv)
 | 
			
		||||
 | 
			
		||||
@ -101,6 +101,15 @@ class Breadcrumbs extends Widget
 | 
			
		||||
     * ]
 | 
			
		||||
     * ```
 | 
			
		||||
     *
 | 
			
		||||
     * Since 2.0.2 each individual link can override global [[encodeLabels]] param like the following:
 | 
			
		||||
     *
 | 
			
		||||
     * ```php
 | 
			
		||||
     * [
 | 
			
		||||
     *     'label' => '<strong>Hello!</strong>',
 | 
			
		||||
     *     'encode' => false,
 | 
			
		||||
     * ]
 | 
			
		||||
     * ```
 | 
			
		||||
     *
 | 
			
		||||
     */
 | 
			
		||||
    public $links = [];
 | 
			
		||||
    /**
 | 
			
		||||
@ -150,8 +159,14 @@ class Breadcrumbs extends Widget
 | 
			
		||||
     */
 | 
			
		||||
    protected function renderItem($link, $template)
 | 
			
		||||
    {
 | 
			
		||||
        $encodeLabel = $this->encodeLabels;
 | 
			
		||||
        if (array_key_exists('encode', $link)) {
 | 
			
		||||
            $encodeLabel = $link['encode'];
 | 
			
		||||
            unset($link['encode']);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (array_key_exists('label', $link)) {
 | 
			
		||||
            $label = $this->encodeLabels ? Html::encode($link['label']) : $link['label'];
 | 
			
		||||
            $label = $encodeLabel ? Html::encode($link['label']) : $link['label'];
 | 
			
		||||
        } else {
 | 
			
		||||
            throw new InvalidConfigException('The "label" element is required for each link.');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -106,6 +106,21 @@ class BreadcrumbsTest extends \yiiunit\TestCase
 | 
			
		||||
        $this->assertEquals("<li>My-<br>Test-Label</li>\n", $unencodedValue);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testEncodeOverride()
 | 
			
		||||
    {
 | 
			
		||||
        $link = ['label' => 'My-<br>Test-Label', 'encode' => false];
 | 
			
		||||
        $method = $this->reflectMethod();
 | 
			
		||||
        $result = $method->invoke($this->breadcrumbs, $link, $this->breadcrumbs->itemTemplate);
 | 
			
		||||
 | 
			
		||||
        $this->assertEquals("<li>My-<br>Test-Label</li>\n", $result);
 | 
			
		||||
 | 
			
		||||
        //without encodeLabels
 | 
			
		||||
        $this->breadcrumbs->encodeLabels = false;
 | 
			
		||||
        $unencodedValue = $method->invoke($this->breadcrumbs, $link, $this->breadcrumbs->itemTemplate);
 | 
			
		||||
 | 
			
		||||
        $this->assertEquals("<li>My-<br>Test-Label</li>\n", $unencodedValue);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testRenderItemWithLabelAndUrl()
 | 
			
		||||
    {
 | 
			
		||||
        $link = ['label' => 'My-<br>Test-Label', 'url' => 'http://localhost/yii2'];
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user