こんにちは、ケーキにフルネームをアーカイブ基準で表示させようとしています。名前を「LASTNAME Firstname」の形式で表示する必要があります。姓はすべて大文字で、名の最初の文字は大文字です。モデルに first_name と last_name があり、仮想フィールドを介してそれらを組み合わせることができましたが、2 つの異なる caps mod に問題があります。
よろしくお願いします。
こんにちは、ケーキにフルネームをアーカイブ基準で表示させようとしています。名前を「LASTNAME Firstname」の形式で表示する必要があります。姓はすべて大文字で、名の最初の文字は大文字です。モデルに first_name と last_name があり、仮想フィールドを介してそれらを組み合わせることができましたが、2 つの異なる caps mod に問題があります。
よろしくお願いします。
afterfind コールバックで: strtoupper(lastname) および ucfirst(strtolower($firstname)) または beforesave でこれを実行し、このようなフィールドをデータベースに保存できます。
またはマークが示唆するように:なぜあなたの見解でこれをしないのですか?
あなたの見解でこれをしてください。この形式でデータベースにデータを保存すると、将来的に頭痛の種になります。たとえば、姓「DiMaggio」をすべて大文字の形式 (「DIMAGGIO」) で保存した場合、単にすべて小文字に変換して最初の文字を大文字にすることはできません。それはあなたに間違っている「ディマジオ」を与えます。
私が言うように、あなたの見解でそれをしてください。ファーストネームとラストネームが別々で、これは素晴らしいことです。
<p class="name">
<span class="last-name"><?php echo h($user['User']['last_name']); ?></span>,
<span class="first-name"><?php echo h($user['User']['first_name']); ?></span>
</p>
また、よりセマンティックな HTML ではなく CSS で姓を大文字に変換します。
.last-name {
text-transform: uppercase;
}
strtoupper()
ビュー ファイルを調べて、関数呼び出しでラップされた文字列を削除するよりも、CSS ルールを変更する方が簡単です。
public $virtualFields = array(
'vf_full_name' => 'CONCAT(UPPER(`last_name`), " ", UPPER(SUBSTRING(`first_name`, 1, 1)), LOWER(SUBSTRING(`first_name`, 2)))',
);