Aar*_*ron 0 php model-view-controller multilingual internationalization
我是否正确理解MVC?
我已经阅读了teresko用户的许多帖子,我想我终于理解了现代MVC的真实概念.我制作了一个关于我如何理解它的图表,我希望有人可以为我确认这一点,也许这个图表可以帮助其他一些用户.

我的计划目录结构是"智能"吗?
另外我想进入文件夹结构.我不太确定我打算使用一种非常聪明/有效的方法来构建它们.在我的根目录中,我有4个文件夹.该模型文件夹 中包含3个子目录称为data_mappers,domain_objects和服务.该演示文件夹中包含2个子目录称为自然美景和控制器.我的根目录中的第三个文件夹是我不太确定的名为lib的文件夹之一,还包含另外3个子文件夹,脚本,主题和模板(这是一个适合视图调用的模板的地方吗?) .我拥有的最后一个文件夹称为配置(如果有人能想到更好的名称建议,欢迎使用).这是我将放置路由器和基类以及该类型的任何文件的地方.我不只是想用我的框架来实现功能,我希望它在技术上合理,任何建议/建议都是受欢迎的,我想在开始制作索引和路由器等之前确保我的理解是正确的.我不必重新开始.谢谢
这是一种关于MVC多语言支持的好方法吗?
(稍微偏离主题,但我需要将其纳入规划我的MVC框架,它可能对其他用户有所帮助,并且为了清楚简洁地回答问题,需要理解网站的结构,并且恰好是在上面详细描述)
我的网站必须以英语和法语提供,我恰好都会说.我计划在模板文件夹中创建另外两个子文件夹,一个名为en和另一个fr,只需将所有英文模板放在en文件夹中并将它们翻译成法语并将它们放在fr文件夹中并设置网站以便www .mywebsite.com/en/home以英文显示模板,www.mywebsite.com/fr/home显示法文模板.
将有一个主要的语言选择页面,将您重定向到en或fr.然后,我计划将2个字母的语言代码存储在$ _SESSION变量中.视图将使用此$ _SESSION变量来选择要显示的模板.这是我在旧版本的网站上完成它的方式.这是在MVC中实现多语言支持的好方法还是有更好的方法?
如果我想让网址也出现在法语中怎么办?如果我将视图文件放在更多的子文件夹中,而不是像这样命名它们:"/ presentation/views/news/news.php"将它们命名为:"/ pre sentation/views/news_nouvelles/news.php"然后make路由器(网址和路由是我的弱点之一,但我将自己学习;)将"_"之前的所有内容存储在与英文网址对应的变量中,以及与法语网址对应的所有内容.这只是一个理论,我还没有尝试过最后一段中的内容,多语言支持更多是讨论而不是问题,尽管再一次,它是相关的,因为需要彻底了解我的框架才能回答/讨论语言支持.
这与MVC无关.当您实现多语言URL时,它就是路由.
基本上,当您的代码在控制器上调用内容时,您应该具有完全初始化的请求实例,该实例已从URL中识别语言并将输入的所有部分转换为对创建实例有用的内容.
$request = new Request($query);
$router = new Router;
$router->import('/path/to/routes.json');
$router->route( $request );
Run Code Online (Sandbox Code Playgroud)
此时,您可以'/presentation/view/dernières/nouvelles'根据已识别的模式将用户的查询(从示例:)拆分为已识别的段.
让我们举例说,matted模式在config中定义为:
/presentation[[/:action[/:filter]]/:resource]
产生的结果是:
resource >> 'nouvelles'
action >> 'view'
filter >> 'dernières'
Run Code Online (Sandbox Code Playgroud)
翻译通常存储在数据库或某些配置文件中.如果您的服务工厂此时已经初始化,那么您可以进入该服务工厂以便于与此存储的配置进行交互:
$normalizer = new Normalizer( $serviceFactory->create('translation') );
$normalizer->adjust($request);
Run Code Online (Sandbox Code Playgroud)
您将通过翻译从存储的配置中收集的内容
translation 用户在查询中提供的值language 其中写入了查询片段title 这对应于片段您获得的数据如下所示:
translation | language | label
-------------------------------------
view | en | view
dernières | fr | latest
nouvelles | fr | news
Run Code Online (Sandbox Code Playgroud)
注意:如果还返回查询的值,则可以使用单个SQL查询执行此类操作,这样您就可以
.. WHERE translation IN ( <the list> )在单个请求中收集所有操作.
这些条目用于两个任务:
到此为止,您应该在Request实例中翻译ll参数,并根据某些条件确定并添加language参数到该请求.
注意:浏览器还会在标题中向您发送一些与语言相关的信息.根据您的设置,您可以使用Accepted-Language标头来确定用户可能更喜欢哪种语言.
my 2 cents
| 归档时间: |
|
| 查看次数: |
1327 次 |
| 最近记录: |