web-dev-qa-db-ja.com

TWIG:大文字は他の文字を小さくします

この内容の変数があります"i want HTML"

capitalize{{ variable|capitalize }}を作成すると、文は次のようになります。"I want html"

TWIGで、文の最初の文字だけを大きく書くにはどうすればよいですか?他の文字はそのままです!?

13
Zwen2012

新しいフィルターを作成 php関数ucfirstを使用して文字列を返すことができます。

9
mykiwi

あなたはこれを行うことができます:

{{ variable[:1]|upper ~ variable[1:] }}

から https://github.com/twigphp/Twig/issues/1652

21
Erliz

良いtwig練習ソリューションを説明するために、カスタムユーティリティTwig拡張機能を作成し、アクセントで始まる文字列のマルチバイト文字列(mb)を考慮して機能させることができます正しく:

use Twig_SimpleFilter;

class UtilitiesExtension extends \Twig_Extension
{
    public function getFilters()
    {
        return array(
            new Twig_SimpleFilter('ucfirst', 
                array($this, 'ucFirst'), array('needs_environment' => true)
            ),
        );
    }

    public function ucFirst(Twig_Environment $env, $string)
    {
        if (null !== $charset = $env->getCharset()) {
            $prefix = mb_strtoupper(mb_substr($string, 0, 1, $charset), $charset);
            $suffix = mb_substr($string, 1, mb_strlen($string, $charset));
            return sprintf('%s%s', $prefix, $suffix); 
        }
        return ucfirst(strtolower($string));
    }
}

次に、そのようなフィルターをtwigファイルから途中で呼び出すことができます。アクセントも機能します:

{{ 'étudiant de PHP' | ucfirst }}

結果:「ÉtudiantdePHP」

6
Samuel Vicent

ucfirstはOkですが、アクセントを正しく処理しません。したがって、私のucfirstフィルターは次のようになります。

/**
 * ucfirst with handling of accents.
 *
 * @param string $value
 * @param string $encoding
 *
 * @return string
 */
public function ucfirst($value, $encoding = 'UTF8')
{
    $strlen = mb_strlen($value, $encoding);
    $firstChar = mb_substr($value, 0, 1, $encoding);
    $then = mb_substr($value, 1, $strlen - 1, $encoding);

    return mb_strtoupper($firstChar, $encoding) . $then;
}

-

$test1 = $this->container->get('app.twig.text.extension')->ucfirst('i want HTML');
$test2 = $this->container->get('app.twig.text.extension')->ucfirst('éllo');
dump($test1, $test2); die();

出力します:

"I want HTML"
"Éllo"

ucfirstと同じように出力されます。

"I want HTML"
"éllo"
4
COil

ucfirst()のフィルターは非常に簡単に作成できます。

_//in PHP - during setup
$twig->addFilter(new \Twig_SimpleFilter('ucfirst', 'ucfirst'));

//in Twig usage
{% set variable = 'i want html' %}
{{ variable|ucfirst }} //output: "I want html"
_

「HTML」でstrtoupper()を使用する場合は、フィルターを作成できます

2
IROEGBU

文の最初の単語を選択し、それだけを大文字にする必要があります。

{% set foo = "i want HTML" | split(' ', 2) %}
{{ foo[0] | capitalize }} {{ foo[1] }}{% set foo = "i want HTML" | split(' ', 2) %}
{{ foo[0] | capitalize }} {{ foo[1] }}

お役に立てば幸いです。ここでサンプルを参照してください: リンク

1
Tony H

Twig_SimpleFilterは非推奨です。現在のTwig_Filterを使用し、アクセント(COilコードから取得)を処理する実用的なソリューションを作成しました。この例は、スタンドアロンアプリケーションでのTwigカスタムフィルターを示しています。

<?php

require __DIR__ . '/vendor/autoload.php';

use Twig\Environment;
use Twig\Loader\FilesystemLoader;

$loader = new FilesystemLoader(__DIR__ . '/templates');
$twig = new Environment($loader);
$twig->addFilter(new Twig_Filter('accFirst', 'accFirst'));

$sentence = 'šumivé víno';

echo $twig->render('customfilter.html.twig',
    ['sentence' => $sentence]);

function accFirst($value, $encoding = 'UTF8')
{
    $strlen = mb_strlen($value, $encoding);
    $firstChar = mb_substr($value, 0, 1, $encoding);
    $rest = mb_substr($value, 1, $strlen - 1, $encoding);

    return mb_strtoupper($firstChar, $encoding) . $rest;
}

以下はテンプレートファイルです。テンプレートファイルはtemplatesディレクトリにあります。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Custom filter</title>
</head>

<body>  

    <p>
     {{ sentence | accFirst }} 
    </p>      

</body>

</html>
1
Jan Bodnar

ネイティブコードを使用した簡単な解決策は次のとおりです。

{{ variable|first|capitalize ~ variable|slice(1) }}
0
g.sus