- CakePHP 教程
- CakePHP - 主页
- CakePHP - 概述
- CakePHP - 安装
- CakePHP - 文件夹结构
- CakePHP - 项目配置
- CakePHP - 路由
- CakePHP - 控制器
- CakePHP - 视图
- CakePHP - 扩展视图
- CakePHP - 查看元素
- CakePHP - 查看活动
- CakePHP - 使用数据库
- CakePHP - 查看记录
- CakePHP - 更新记录
- CakePHP - 删除一条记录
- CakePHP - 服务
- CakePHP - 错误和异常处理
- CakePHP - 日志记录
- CakePHP - 表单处理
- CakePHP - 国际化
- CakePHP - 会话管理
- CakePHP - Cookie 管理
- CakePHP - 安全性
- CakePHP - 验证
- CakePHP - 创建验证器
- CakePHP - 分页
- CakePHP - 日期和时间
- CakePHP - 文件上传
- CakePHP 有用资源
- CakePHP - 快速指南
- CakePHP - 有用的资源
- CakePHP - 讨论
CakePHP - 国际化
与许多其他框架一样,CakePHP 也支持国际化。我们需要按照以下步骤从单一语言过渡到多种语言。
步骤1
创建单独的区域设置目录 resources\ locales。
第2步
在目录 src\Locale 下为每种语言创建子目录。子目录的名称可以是语言的两个字母 ISO 代码或完整的语言环境名称,如 en_US、fr_FR 等。
步骤3
在每个语言子目录下创建单独的default.po文件。该文件包含msgid和msgstr形式的条目,如以下程序所示。
msgid "msg" msgstr "CakePHP Internationalization example."
这里,msgid是将在视图模板文件中使用的键,msgstr是存储翻译的值。
步骤4
在 View 模板文件中,我们可以使用上面的msgid,如下所示,它将根据 locale 的设置值进行翻译。
<?php echo __('msg'); ?>
可以通过以下行在config/app.php文件中设置默认区域设置。
'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US')
要在运行时更改本地,我们可以使用以下行。
use Cake\I18n\I18n; I18n::locale('de_DE');
例子
在 config/routes.php 文件中进行更改,如以下程序所示。
配置/routes.php
<?php use Cake\Http\Middleware\CsrfProtectionMiddleware; use Cake\Routing\Route\DashedRoute; use Cake\Routing\RouteBuilder; $routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([ 'httpOnly' => true, ])); $builder->applyMiddleware('csrf'); //$builder->connect('/pages', ['controller'=>'Pages','action'=>'display', 'home']); $builder->connect('locale', ['controller'=>'Localizations','action'=>'index']); $builder->fallbacks(); });
在src/Controller/LocalizationsController.php创建LocalizationsController.php文件。将以下代码复制到控制器文件中。
src/Controller/LocalizationsController.php
<?php namespace App\Controller; use App\Controller\AppController; use Cake\I18n\I18n; class LocalizationsController extends AppController { public function index() { if($this->request->is('post')) { $locale = $this->request->getData('locale'); I18n::setLocale($locale); } } } ?>
在 resources\ locales处创建locales目录。在 locales 目录下创建 3 个目录,名为en_US、fr_FR、de_DE 。在每个目录下创建一个名为default.po 的文件。将以下代码复制到相应文件中。
资源/locales/en_US/default.po
msgid "msg" msgstr "CakePHP Internationalization example."
资源/locales/fr_FR/default.po
msgid "msg" msgstr "Exemple CakePHP internationalisation."
资源/locales/de_DE/default.po
msgid "msg" msgstr "CakePHP Internationalisierung Beispiel."
在src/Template处创建一个Localizations目录,并在该目录下创建一个名为 index.php 的视图文件。将以下代码复制到该文件中。
src/模板/本地化/index.php
<?php echo $this->Form->create(NULL,array('url'=>'/locale')); echo $this->Form->radio("locale", [ ['value'=>'en_US','text'=>'English'], ['value'=>'de_DE','text'=>'German'], ['value'=>'fr_FR','text'=>'French'], ] ); echo $this->Form->button('Change Language'); echo $this->Form->end(); ?> <?php echo __('msg'); ?>
通过访问以下 URL 来执行上述示例。http://localhost/cakephp4/区域设置
输出
执行后,您将收到以下输出。
电子邮件
CakePHP 提供了 Email 类来管理电子邮件相关功能。要在任何控制器中使用电子邮件功能,我们首先需要通过编写以下行来加载电子邮件类。
use Cake\Mailer\Email;
Email 类提供了各种有用的方法,如下所述。
句法 | From(字符串|数组|null $email null, string|null $name null ) |
---|---|
参数 |
|
退货 | 数组|$这个 |
描述 | 它指定来自哪个电子邮件地址;电子邮件将被发送 |
句法 | To(字符串|数组|null $email null, string|null $name null) |
---|---|
参数 |
|
退货 | 数组|$这个 |
描述 | 它指定电子邮件将发送给谁 |
句法 | 发送(字符串|数组|null $内容为null) |
---|---|
参数 |
|
退货 | 大批 |
描述 | 使用指定的内容、模板和布局发送电子邮件 |
句法 | 主题(字符串|null $主题为空) |
---|---|
参数 |
|
退货 | 数组|$这个 |
描述 | 获取/设置主题 |
句法 | 附件(字符串|数组|null $attachment snull) |
---|---|
参数 |
|
退货 | 数组|$这个 |
描述 | 将附件添加到电子邮件中 |
句法 | 密件抄送(字符串|数组|null $电子邮件null,字符串|null $名称null) |
---|---|
参数 |
|
退货 | 数组|$这个 |
描述 | 密件抄送 |
句法 | cc( 字符串|数组|null $email null , 字符串|null $name null ) |
---|---|
参数 |
|
退货 | 数组|$这个 |
描述 | 抄送 |
例子
在 config/routes.php 文件中进行更改,如以下程序所示。
配置/routes.php
<?php use Cake\Http\Middleware\CsrfProtectionMiddleware; use Cake\Routing\Route\DashedRoute; use Cake\Routing\RouteBuilder; $routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([ 'httpOnly' => true, ])); $builder->applyMiddleware('csrf'); //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']); $builder->connect('/email',['controller'=>'Emails','action'=>'index']); $builder->fallbacks(); });
在src/Controller/EmailsController.php创建一个EmailsController.php文件。将以下代码复制到控制器文件中。
src/Controller/EmailsController.php
<?php namespace App\Controller; use App\Controller\AppController; use Cake\Mailer\Email; class EmailsController extends AppController{ public function index(){ $email = new Email('default'); $email->to('abc@gmail.com') ->subject('About') ->send('My message'); } } ?>
在src/Template处创建一个Emails目录,并在该目录下创建一个名为index.php 的视图文件。将以下代码复制到该文件中。
src/模板/电子邮件/index.php
Email Sent.
在发送任何电子邮件之前,我们需要对其进行配置。在下面的屏幕截图中,您可以看到有两种传输方式:默认传输方式和 Gmail。我们使用了 Gmail 传输。
您需要将“GMAIL USERNAME”替换为您的 Gmail 用户名,将“APP PASSWORD”替换为您的应用程序密码。您需要在Gmail中开启两步验证并创建新的APP密码才能发送电子邮件。
配置/应用程序.php
通过访问以下 URL 执行上述示例 - http://localhost/cakephp/email
输出
执行后,您将收到以下输出。