标签: yii

11
推荐指数
2
解决办法
1万
查看次数

PHP框架的中间复杂性,在CodeIgniter和Yii之间?

容易像CI(这意味着强制性好,简单,最新的文档).但也有一些比CI更多的功能.

Yii有很多功能,但它也更复杂(它有点迫使你必须使用它的很多功能).这意味着为您的网络应用添加一些功能需要三倍的时间,因为您必须找出许多新的小功能Yii.

这有点像CI在需要的时候"离开你的方式",Yii妨碍你,如果你不这样做,它会破坏.

CI中缺少的功能在这个新的"中间"PHP框架中很有用:

  • 代码生成(crud).
  • 验证.
  • 访问控制.
  • 布局.
  • 窗口小部件.
  • 易于/自动分页(如yii)
  • 简单的uri参数

Yii给我带来问题的地方:

就像每个小任务都有一些内置功能(这很好),但是,你必须使用内置功能,否则会发生不好的事情.(CI让你不受欢迎,但是做得太多,Yii帮了很多,但有时候太过分了,它迫使你筛选文档,以便你发现这些功能,如果没有它们你就无法完成一项任务,需要花费四倍的时间,在CI或非框架应用程序中).

介于两者之间吗?

(ASP.NET MVC可能是'它',但我不懂语言,所以学习它的努力将比学习Yii php框架更好,所以我正在寻找一个PHP框架)

php codeigniter yii

11
推荐指数
1
解决办法
2650
查看次数

Yii表单模型验证 - 任何一个都是必需的

我在表单上有两个字段(forgotpassword表单)用户名和电子邮件ID.用户应输入其中一个.我的意思是检索密码用户可以输入用户名或电子邮件ID.有人可以指出我的验证规则吗?

我可以使用任何内置规则吗?

(对不起,如果已经讨论过或者我错过了)

谢谢你的帮助

问候

基兰

forms validation model yii

11
推荐指数
3
解决办法
2万
查看次数

如何使用Yii多语言数据库模型?

我在创建数据库时遇到问题,我创建的数据完全是多语言的,我希望有人可以帮助我.

我将所有桌子分成两部分; "通用"表(不包含任何需要翻译的文本)和包含需要翻译的所有字段的表.

示例表:

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多语言网站的更好的全方位解决方案(除了由于文本字段的重复而我真的不喜欢的当前扩展)或类似的东西,请告诉我同样.

提前致谢!

database multilingual yii

11
推荐指数
1
解决办法
8075
查看次数

编译运行程序时发生Hiphop错误

我在使用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,但没有任何改变:(

有人遇到这个错误对我来说一样吗?如何修复它们?谢谢你的帮助!

php compiler-construction runtime-error yii hiphop

11
推荐指数
1
解决办法
969
查看次数

在cURL中使用被盗的cookie来绕过CSRF

我必须处理一个网页.此网页基于YII framework,并且登录页面受到保护CSRF tokens.当我通过登录凭据时POST method.我得到的error 400The CSRF token could not be verified消息.

我不知道如何通过这种保护.我不明白这个机制.当我通过Chrome浏览器登录时,我会看到POST消息的样子.它有4个参数:CSRF密钥,登录名,密码,一个空变量.浏览器如何获得正确的CSRF密钥进行打磨?

我有这个网页的登录名和密码,我可以以普通用户身份登录.只有登录页面受CSRF保护.我可以在正常登录时使用浏览器创建的cookie(如何做),在登录页面后给出cookie to cURL并开始处理URLs

php cookies curl csrf yii

11
推荐指数
1
解决办法
2127
查看次数

函数获取Yii中的用户IP地址

我正在尝试创建获取用户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)

我知道我做错了什么?谢谢

yii

11
推荐指数
2
解决办法
2万
查看次数

yii2框架消息语言

如您所知,在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中

这项工作的最佳解决方案是什么?

php yii yii-components yii-extensions yii2

11
推荐指数
1
解决办法
6561
查看次数

MySQL Union全部在Yii的默认范围内

我正在使用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,没有unionCDbCriteria.

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)

php mysql yii

11
推荐指数
1
解决办法
1533
查看次数

在yii2高级中放置共同资源的位置?

我想在前端后端访问我的cssjavascript文件.

所以,我的问题是我放置cssjavascript文件,以便它们可以访问前端和后端.

或者有没有办法重用 文件,即我把我的CSS文件放在后端的web文件夹中,并在前端使用它.

谢谢

php yii yii2 yii2-advanced-app

11
推荐指数
1
解决办法
1357
查看次数