如何从模型实例中获取模型名称.对于前者
$ model = new State;
这里,State是model $ model是State model instance.
我想得到模型名称,即来自$ model的状态,即模型实例.
我开始在已经过身份验证的用户和没有经过身份验证的用户之间做出一些区别.为此,我正在使用
Yii::app()->user->id;
Run Code Online (Sandbox Code Playgroud)
但是,在确定的视图中,我输入以下代码:
<?php
if(Yii::app()->user->isGuest) {
print("Welcome back Guest!");
print("Your id is ".Yii::app()->user->id);
} else {
print("Welcome back ".Yii::app()->user->name);
print("Your id is ".Yii::app()->user->id);
}?>
Run Code Online (Sandbox Code Playgroud)
我总是得到"欢迎回来的客人!",无论我是否已登录(成功).如果我已登录,则会显示欢迎消息以及用户的ID!
编辑
@ briiC.lv嘿..对于迟到的回复感到抱歉,我希望你还在关注这个!我没有扩展给定的UserIdentity类.这是强制性的吗?因为我仍然没有得到很好的整体授权方面的问题,我认为这将是最好给它们提供了一流的尝试,然后用我自己的功能扩展.不管怎么样,接下来我后我的UserIdentity类与它的小的调整.也许问题出在这里?
<?php class UserIdentity extends CUserIdentity{
private $_id;
public function authenticate()
{
$user = Users::model()->findAll('username=\''.$this->username.'\' AND password=\''.$this->encryptedPassword.'\'');
if(!isset($user[0]))
{
return false;
}
else
{
$this->setState('id', $user[0]->id);
$this->username = $user[0]->username;
$this->errorCode=self::ERROR_NONE;
return true;
}
}
public function getId()
{
return $this->_id;
}
Run Code Online (Sandbox Code Playgroud)
}
这是我按照你的建议开始记录时得到的输出; 成功登录后立即获得此输出.
[05:23:21.833][trace][vardump] CWebUser#1 (
[allowAutoLogin] => true
[guestName] …Run Code Online (Sandbox Code Playgroud) 怎么做的?我是否只准备一个$_POST/ $_GET/ $_FILESset并将其传递给控制器?或者是否有更优雅的方式来测试Yii控制器?
我有一个提供者表(id,title,onoff),其中onoff列是一个状态:1 = on,0 = off我在DB中没有这些状态的表,所以我没有状态模型.
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'provider-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
array(
'name'=>'id',
'htmlOptions'=>array('width'=>'40px'),
),
'title',
array(
'name'=>'onoff',
'filter'=>CHtml::dropDownList('Provider[onoff]', '',
array(
''=>'All',
'1'=>'On',
'0'=>'Off',
)
),
),
array(
'class'=>'CButtonColumn',
'template'=>'{update}{delete}'
),
),
Run Code Online (Sandbox Code Playgroud)
它会过滤数据,但是在ajax之后忘记了下拉状态在这种情况下构建下拉列表的最佳方法是什么?
在数据网格单元格中将1替换为On和0替换为Off的最佳方法是什么?
我正在创建一个使用ajaxRequest的网站,当我点击一个链接时,它将使用ajaxRequest加载.当我加载例如user/login UserController actionLogin时,我使用processOUtput将视图renderPartial设置为true,因此将生成该视图中所需的js,但是如果我在该视图中有clientScriptRegister,则如何避免生成scriptRegistered两次或多个取决于ajaxRequest?我试图Yii::app()->clientScript->isSCriptRegistered('scriptId')检查脚本是否已经注册,但似乎如果你使用了ajaxRequest,结果总是为false,因为它只在渲染完成后才为真.
控制器代码
if (Yii::app()->request->isAjaxRequest)
{
$this->renderPartial('view',array('model'=>$model),false,true);
}
Run Code Online (Sandbox Code Playgroud)
查看代码
if (!Yii::app()->clientScript->isScriptregistered("view-script"))
Yii::app()->clientScript->registerScript("view-script","
$('.link').live('click',function(){
alert('test');
})
");
Run Code Online (Sandbox Code Playgroud)
如果我是第一次请求控制器,它可以正常工作(警报1次)但如果我再次请求同一个控制器而不刷新我的页面并且只使用ajaxRequest,如果你单击它,警报将输出两次(因为它保持在你已经注册一次的情况下生成事件)
这是相同的,如果你有CActiveForm使用jQuery功能的观点.该corescript yiiactiveform将被调用每次你的RenderPartial内.
我有一个模型(ActiveRecord)有5个属性(DB列).
我获取特定记录并填充包含3个字段的表单(不应更新其他两个字段).
然后我更改特定字段并按保存.
如何更新记录,而不是触及不在表单中的字段?
我想知道是否有可能在操作呈现视图时从其中一个操作异步调用Yii控制器方法,让方法完成长时间运行的操作.我很乐意做类似下面的代码,我不需要返回结果my_long_running_func.
public function actionCreate() {
$model = new Vacancies;
if (isset($_POST['Vacancies'])) {
$model->setAttributes($_POST['Vacancies']);
$model->save();
//I wish :)
call_user_func_async('my_long_running_func',$model);
}
$this->render('create', array( 'model' => $model));
}
Run Code Online (Sandbox Code Playgroud)
我试图在Yii写一个控制器动作,发布空缺并通知感兴趣的订阅者.问题是执行通知查询需要很长时间.
现在我正在寻找一种异步运行查询的方法,以便海报在尽可能短的时间内查看他的响应,而查询在后台以类似于C#委托或事件的方式运行.
我GOOGLE了解决方案进行异步请求(一个或多个)控制器动作的过程中,但所有我想做的是异步运行控制器的方法和行动不得不等待,直到请求(S)已经完成.
我尝试了以下方法,但对于大约1500个用户的测试数据,查询仍然很慢.
Yii ActiveRecord
if ($vacancy->save()) {
if($vacancy->is_active == 1) {
$url = Yii::app()->createUrl('vacancies/view',array('id'=>$model->id));
$trainees = YumUser::getUsersByRole('Trainees');
if($trainees!=null) {
foreach($trainees as $trainee){
$message = new YumMessage;
$message->from_user_id = Yii::app()->user->id;
$message->title = 'Vacancy Notification: '.date('M j, Y');
$message->message = "A new vacancy has …Run Code Online (Sandbox Code Playgroud)我在Yii框架的JQRelcopy模块中遇到了CJuiDatePicker的问题.
我使用这个模块,因为我有一个带有datepicker字段的表单,可以根据用户的意愿复制多次.
如果我放一个普通字段(没有datepicker),模块工作正常,但是一旦我添加了模块CJuiDatePicker,它也是Yii框架的一个模块,我就会出现一个空白页面.我按照以下教程:http://www.yiiframework.com/extension/jqrelcopy/解释了包含CJuiDatePickerm的表单中的集成jqrelcopy,这正是我需要的.
我研究了这个问题,我发现当我在我的小部件JQRelcopy的属性中使用以下行时,会出现问题:
'jsAfterNewId'=> JQRelcopy :: afterNewIdDatePicker($ datePickerConfig),
在
$ this-> widget('ext.jqrelcopy.JQRelcopy',array(
Run Code Online (Sandbox Code Playgroud)'id' => 'copylink', 'removeText' => 'remove', //add the datapicker functionality to the cloned datepicker with the same options 'jsAfterNewId' => JQRelcopy::afterNewIdDatePicker($datePickerConfig),));
我看了几个论坛,一个人遇到了和我一样的问题.
你能帮助我吗?
对不起我的英语不好
好吧,我有两个星期前使用facebook工作并正确登录hybridauth,我没有任何改变,今天早上我发现它无法正常工作.我试图将facebook应用程序(id和密钥)切换到另一个之前也在工作的应用程序,但仍然在发生相同的情况.我也尝试运行hybridauth附带的示例,它们也没有工作,所以我知道不是来自我身边的配置,也不是来自facebook app配置.
这是我尝试登录时告诉我的内容:
错误! 认证失败.用户已取消身份验证或提供商拒绝连接.
原始错误消息:身份验证失败!Facebook返回了一个荣耀的用户ID.
更新: 我从1周前开始工作,为了让它工作我发现其他人之前(不到1个月前)有相同的问题,他们通过更新Facebook PHP SDK修复了17天前.
以下是GitHub的链接,您可以在其中查看更改以解决此问题:
https://github.com/F21/hybridauth/commit/3b115ee3abb5afbf44c37082e63aa8b056bf550c
有了这个,我设法让一切正常,但现在发生了同样的错误,即使这些变化(工作一周后).
我想为特定列中的标题单元格设置一些样式或css类.
这会仅更改列中数据单元格的css.
'columns'=>array(
array(
'name'=>'id',
'header'=>'#',
'htmlOptions'=>array('style'=>'width: 50px; text-align: center;', 'class'=>'zzz'),
),
Run Code Online (Sandbox Code Playgroud)
如何在此列的标题单元格中设置css或样式?
yii ×10
php ×5
activerecord ×1
asynchronous ×1
clientscript ×1
controller ×1
events ×1
facebook ×1
hybridauth ×1
logging ×1
model ×1
mysql ×1
sql-update ×1
testing ×1
yii-events ×1
yii1.x ×1