容易像CI(这意味着强制性好,简单,最新的文档).但也有一些比CI更多的功能.
Yii有很多功能,但它也更复杂(它有点迫使你必须使用它的很多功能).这意味着为您的网络应用添加一些功能需要三倍的时间,因为您必须找出许多新的小功能Yii.
这有点像CI在需要的时候"离开你的方式",Yii妨碍你,如果你不这样做,它会破坏.
CI中缺少的功能在这个新的"中间"PHP框架中很有用:
Yii给我带来问题的地方:
就像每个小任务都有一些内置功能(这很好),但是,你必须使用内置功能,否则会发生不好的事情.(CI让你不受欢迎,但是做得太多,Yii帮了很多,但有时候太过分了,它迫使你筛选文档,以便你发现这些功能,如果没有它们你就无法完成一项任务,需要花费四倍的时间,在CI或非框架应用程序中).
介于两者之间吗?
(ASP.NET MVC可能是'它',但我不懂语言,所以学习它的努力将比学习Yii php框架更好,所以我正在寻找一个PHP框架)
我在表单上有两个字段(forgotpassword表单)用户名和电子邮件ID.用户应输入其中一个.我的意思是检索密码用户可以输入用户名或电子邮件ID.有人可以指出我的验证规则吗?
我可以使用任何内置规则吗?
(对不起,如果已经讨论过或者我错过了)
谢谢你的帮助
问候
基兰
我在创建数据库时遇到问题,我创建的数据完全是多语言的,我希望有人可以帮助我.
我将所有桌子分成两部分; "通用"表(不包含任何需要翻译的文本)和包含需要翻译的所有字段的表.
示例表:
base_material
id
picture
base_material_i18n
base_material_id
localization_id
name
description
review_status
review_notes
localization
id
language_name
Run Code Online (Sandbox Code Playgroud)
查询以获取翻译(如果没有可用的翻译,则使用英语(en)作为后备语言):
SELECT o.id
, o.type
, o.code
, o.position
, ifnull(t.name,d.name) name
, ifnull(t.description,d.description) description
FROM base_material o
INNER JOIN base_material_i18n d
ON ( o.id=d.base_material_id)
LEFT OUTER JOIN base_material_i18n t
ON ( d.base_material_id=t.base_material_id AND t.localization_id='nl' )
WHERE d.localization_id='en'
Run Code Online (Sandbox Code Playgroud)
我的问题是当我在搜索base_material对象时,如何自动获取Yii中附加到我的模型的那些翻译(使用此查询中的后备语言)?(这只是一个示例表,但几乎所有我的表(20+)都是以这种方式构建的,所以如果可能的话我会需要灵活的东西)
使用我需要的现有系统的一个例子是Propel:http://propel.posterous.com/propel-gets-i18n-behavior-and-why-it-matters
任何想法如何去做?我已经检查了有关多语言网站(如多语言活动记录)的现有Yii扩展,但它们都使用不同的数据库设计(主表中的一般信息+后备语言,i18n表中的翻译),我是不知道如何更改这些扩展以使用我的数据库模型.
如果有人知道改变现有扩展的方法,以便它可以使用我的数据库方案,那么这将是绝对精彩的,可能是最好的方法.
编辑:我添加了赏金,因为我仍然找不到任何关于如何让Propel与Yii一起工作的东西(Doctrine存在扩展,但是Doctrine也不支持这种带有翻译的DB模型),也没有有关如何使用现有Yii扩展或使用范围处理此问题的任何其他信息.
编辑:观看了98次但只有3次赞成和1次评论.我不禁感到我在这里做错了,无论是在我的问题还是应用程序/数据库设计中; 或者我的问题只是非常独特(这会让我感到惊讶,因为我不认为我的多语种数据库设计是荒谬的;-).所以,如果有人知道Yii和/或Propel多语言网站的更好的全方位解决方案(除了由于文本字段的重复而我真的不喜欢的当前扩展)或类似的东西,请告诉我同样.
提前致谢!
我在使用Hiphop尝试编译一个简单的yii应用程序(使用cmd生成yiic webapp demo)时取得了成功.
hphp test.php --keep-tempdir=1 --log=3 --include-path="../yii/framework"
编译处理没有任何错误或警告.我可以使用cmd编译程序启动服务器:
sudo /tmp/hphp_8AcATe/program -m server -p 8008 -v "Server.SourceRoot=pwd " \ -v "Server.DefaultDocument=index.php" -v "Server.EnableStaticContentFromDisk=true" -c $HPHP_HOME/bin/mime.hdf
(这个cmd从这里引用- 示例:编译WordPress)
之后,我通过浏览器访问http://127.0.0.1:8008,然后遇到错误:
更新(我在下面的路径中混淆并修复)
HipHop通知:尝试调用/var/www/demo/../yii/framework/yii.php但未找到文件.在第12行的index.php中
HipHop致命错误:不存在所需的文件:第12行的index.php中的/var/www/demo/../yii/framework/yii.php
这是第12行,index.php:
4. $yii=dirname(__FILE__).'/../yii/framework/yii.php';
...
12. require_once($yii);
Run Code Online (Sandbox Code Playgroud)
UPDATE
我尝试使用realpath()作为@ prodigitalson的提示,但在控制台中,程序仍然输出相同的内容:
所需的文件不存在:第12行的index.php中的/var/www/demo/yii/framework/yii.php
为避免在相对路径混淆的情况下,我将编译的程序文件夹复制到/var/www(root目录与yii lib :) /var/www/yii/framework,但没有任何改变:(
有人遇到这个错误对我来说一样吗?如何修复它们?谢谢你的帮助!
我必须处理一个网页.此网页基于YII framework,并且登录页面受到保护CSRF tokens.当我通过登录凭据时POST method.我得到的error 400和The CSRF token could not be verified消息.
我不知道如何通过这种保护.我不明白这个机制.当我通过Chrome浏览器登录时,我会看到POST消息的样子.它有4个参数:CSRF密钥,登录名,密码,一个空变量.浏览器如何获得正确的CSRF密钥进行打磨?
我有这个网页的登录名和密码,我可以以普通用户身份登录.只有登录页面受CSRF保护.我可以在正常登录时使用浏览器创建的cookie(如何做),在登录页面后给出cookie to cURL并开始处理URLs?
我正在尝试创建获取用户IP地址的快捷方式,我在protected/helpers/shortcut.php中创建了这个函数
echo getIP();
function getIP()
{
return CHttpRequest::getUserHostAddress();
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误,因为我将我的php.ini设置为严格.和getUserHostAddress()不是静态函数
Strict Standards: Non-static method CHttpRequest::getUserHostAddress() should not be called statically in /Applications/XAMPP/xamppfiles/htdocs/dev/protected/helpers/shortcuts.php on line 97
::1
Run Code Online (Sandbox Code Playgroud)
我试过了
Yii::app()->request->userHostAddress;
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误
Notice: Trying to get property of non-object in /Applications/XAMPP/xamppfiles/htdocs/dev/protected/helpers/shortcuts.php on line 97
Run Code Online (Sandbox Code Playgroud)
我知道我做错了什么?谢谢
如您所知,在Yii2中,核心消息以26种语言提供.我想更改yii核心消息语言以我的语言显示验证消息.
我将此行添加到配置文件中:
'language' => 'fa_IR',
Run Code Online (Sandbox Code Playgroud)
并添加了这一行:
'i18n'=>[
...
'yii'=>[
'class' => 'yii\i18n\PhpMessageSource',
'basePath' => "@vendor/yiisoft/yii2/messages",
'sourceLanguage' => 'en_US',
'fileMap' => [
'yii'=>'yii.php',
]
]
]
],
Run Code Online (Sandbox Code Playgroud)
但核心信息以英文显示.我只想使用Yii2提供的框架消息.例如,在此路径vendor/yiisoft/yii2/messages/fa_IR/yii.php中
这项工作的最佳解决方案是什么?
我正在使用Yii 1.1.16,并且想知道我的联盟2模型如何使用默认范围?
model 1 = abc
model 2 = abc2
Run Code Online (Sandbox Code Playgroud)
基本上我想做一个简单的联盟
SELECT * FROM `abc`
UNION ALL
SELECT * FROM `abc2`
Run Code Online (Sandbox Code Playgroud)
没有真正使用默认范围,所以对概念有点新意.两个表都具有完全相同的列号和列名.
我试过这个,但失败了.
在我的abc模型中
public function defaultScope() {
return array(
'alias' => 't2',
'select'=>array('t.*, t2.*'),
'union'=>array('SELECT * FROM `abc2`')
);
}
Run Code Online (Sandbox Code Playgroud)
更新:
刚刚意识到http://www.yiiframework.com/doc/api/1.1/CDbCriteria,没有union了CDbCriteria.
public function defaultScope() {
return array(
//'alias' => 't',
'select'=>array('*'),
'join'=>'UNION ALL SELECT * FROM `abc2`'
);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码给了我一个错误
CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column …Run Code Online (Sandbox Code Playgroud) 我想在前端和后端访问我的css和javascript文件.
所以,我的问题是我放置css和javascript文件,以便它们可以访问前端和后端.
或者有没有办法重用 文件,即我把我的CSS文件放在后端的web文件夹中,并在前端使用它.
谢谢
yii ×10
php ×7
yii2 ×2
codeigniter ×1
cookies ×1
csrf ×1
curl ×1
database ×1
forms ×1
frameworks ×1
hiphop ×1
model ×1
multilingual ×1
mysql ×1
validation ×1