谁一开始就是大神?

PHP 第8页

PHP

后台任务的实现[2.0]

Bellapony阅读(46)

项目有需求,需要点击下载文件、或者导出、导入文件的时候,即加入后台任务,在后台那里添加任务运行查询,等查询完数据再提示可以下载,请问应该怎么实现呢,各位大牛

1任务加到数据库,用一个定时脚本去跑,跑完更新状态
2用消息队列去处理
个人想法:
查出数据后,渲染成对应类型的文件,将文件存放的url入表中,可以使用长连接,查看表中是否有它想要数据的url,如果有就提示下载。后台使用rabitMq(消息队列就可以实现异步渲染文件吧)。。。。,前端也可以通过JS点击下载后,隔几秒钟掉一下接口看看需要下载的数据在不在。
建议项目集成workerman或swoole,使用参考文档
我现在有些需求和你差不多,短信,环信,友盟这些都是写入到任务中,发送成功后,同步任务
下载原理也差不多,队列执行下载完后同步下载地址和状态
项目下集成了workerman创建一个守护进程,多个子进程,去执行任务
PC端的socket通信推送消息也支持,
最近也是在做后台管理的时候有个导出 execl 文件,在查看列表页的时候就把当前查看列表的SQL加密作为参数,点击导出就是SQL执行直接导出了。没有什么后台任务进行。如果你的比较繁琐的话,个人建议就是丢到任务中,处理完毕通知用户,至于通知方式可以是 长连接,邮箱,再就是用户刷新或者访问其他站内地址以站内信的方式告知。
我想,在后台队列中生成一个任务,同时生成数据库下载文件,状态为输出处理中,后台队列完毕后,更改状态为可下载
按照你说的需求只能用队列+cron

关于登录的问题[2.0]

youthseagull阅读(48)

今天做项目,突然发现了个问题,后台地址为admin.xxx.com,然而,在未登录的状态,居然还可以进入后台首页。点击退出登录,跳到了admin.xxx.com/site/login,但是把site/login去掉了,又进去了首页。。。黑人问号,我已经在controller里面写了拦截TIM图片20171206173500.png
大家能帮我看看有什么问题吗

` ‘access’ => [
在@列表里面加上index方法,就可以防止在未登录情况下访问主页了

GridView里面,有一项是从别的表里面查出来的,怎么做排序?[2.0]

coolhappy阅读(47)

[
                'attribute'=>'address.address',
                'label'=>'地址',
                'value'=>'address.address',
                'sortLinkOptions'=> (new yii\data\Sort())->link('address.address'),//这里怎么写

            ],

上面这里address.address前面这个是model名, 后面这个address是属性名

如上, 这里的link改怎么写, 我按上面的写法, 会提示没有“address.address”这个属性。

给个例子如下:
这个backMember是member表的,这里是在Report模型里添加个属性就可以多关联到的字段进行排序了。希望这个例子能够帮助到你
用跟这个字段关联字段

ActiveDataProvider怎么得到查询的结果集?[2.0]

youthKeo阅读(45)

将ActiveDataProvider->getModels()得到的结果怎么把里面数据提取出来, 用于转换成json,发到前台.
我现在用的是(new \yii\db\Query())->select(…)->all(), 得到数据再转成Json到前台.

这个不就已经拿到对象结果了吗,遍历用对象去取就行了,看看这个你就明白了:
至于你用PHP提供的方法也好,其他也好,取出你需要的数组就行
应该没有,因为在我看来,你gerModel()其实就是已经拿到数据了,只不过是对象的形式,你想取里面具体的,那你就要自己处理
还真是受教了,我一直也在想怎么取数据 ,原来是getModels!!
其实可以在getModels以后,将对象转换为数组 ,有一个组件 ArrayHelper 转换为数组以后,再转换为json就简单了

请教一下路由规则的参数如何给它义为可不传呢?[2.0]

likelyLion阅读(55)

路由:
/article/knowledge

这个是一个列表,添加了一个规则,转义为 /knowledge

这个是可以的,里面有一个分页,如果我给它加了/knowledge/<page:\d+>

如果在访问的时候 不加page参数,就报错了,请问这个page如何给它定义成可以不传呢?

在你最新的问题中沟通过。不知道你的问题解决了没
关于URL路由规则的配置,整理了一篇文章。可以看看 🙂
站内链接 http://www.yiichina.com/tutorial/1555
博客链接 http://blog.jeen.wang/yii2-url-rule-usage.html
这问题凉了凉了。。。
function actionIndex($id,$page=1){}
/knowledge/<page:\d+>? 后面加个? 可以先进入route控制器中
‘rules’ => [
], \d 换成 \w 试试

cookie关闭浏览器怎么不过期,如何做的关闭浏览器就退出登陆?[2.0]

likelyhappy阅读(52)

Yii::$app->user->login($this->getUser(),  0);

我用如上方法登陆, 以后看到浏览器产生一个PHPSESSION的cookie, 有效期是会话, 我理解是关闭浏览器以后, 应该就失效。 但是实际情况是关闭浏览器下次打开, PHPSESSION还在, 直接给自动登陆了!
怎么样才能保证浏览器关闭时候失效, 包括一些意外的浏览器奔溃, 或者是电脑直接断电的情况。

cookie可以设置退出就失效 仔细了解一下原理就好了.
2.png
这个配置上写了
把设置中的’enableAutoLogin’ => true去掉即可

如何通过POST提交,批量修改数整个表单据(不止单项)?[2.0]

Kimlovely阅读(47)

<?php  $form=ActiveForm::begin([
    'fieldConfig'=>['template'=>'<div class="layui-input-block">{label}{input}{error}</div>'],
    'options'=>[
    //'class'=>'horizontal',
    'id'=>'form_adminmenuadd',
    'style'=>'margin-top:15px;',
    ],
]); ?>
<div class="layui-form-item layui-col-md8">
<?php echo $form->field($pmodel,'id')->dropDownList($list,[
    "class"=>"layui-input",
    "autocomplete"=>"off",
    "lay-verify"=>"required",
    "placeholder"=>"请输入菜单名称"])->label('父级菜单') ?>
</div>	
<?php echo $form->field($model,'id')->hiddenInput([
    "class"=>"layui-input",
    "autocomplete"=>"off",
    "lay-verify"=>"required",
    "placeholder"=>"请输入菜单名称"])->label('父级菜单') ?>
<div class="layui-form-item layui-col-md8">
    <?php echo $form->field($model,'name')->textInput([
        "class"=>"layui-input",
        "autocomplete"=>"off",
        "lay-verify"=>"required",
        "placeholder"=>"请输入菜单名称"]) ?>
    </div>
    <div class="layui-form-item layui-col-md8">
    <?php echo $form->field($model,'id')->textInput([
        "class"=>"layui-input",
        "autocomplete"=>"off",
        "lay-verify"=>"required",
        "placeholder"=>"请输入菜单名称"]) ?>
    </div>
<div class="layui-form-item layui-col-md8">
    <?php echo $form->field($model,'link')->textInput([
        "class"=>"layui-input",
        "autocomplete"=>"off",
        "lay-verify"=>"required",
        "placeholder"=>"请输入链接地址"]) ?>
    </div>
    <div class="layui-form-item layui-col-md8">
        <?php echo $form->field($model,'icon')->textInput([
            "class"=>"layui-input",
            "autocomplete"=>"off",
            "lay-verify"=>"required",
            "placeholder"=>"请输入图标"]) ?>
        </div>
        <div class="layui-form-item layui-col-md8">
            <?php echo $form->field($model,'sort')->textInput([
                "class"=>"layui-input",
                "autocomplete"=>"off",
                "lay-verify"=>"required",
                "placeholder"=>"请输入图标"]) ?>
            </div>
            <div class="layui-form-item layui-col-md8">
                <div class="layui-input-block">
                    <?php echo $form->field($model,'isurl')->inline()->radioList(['1'=>'是','0'=>'否']) ?>
                </div>
            </div>
            <div class="layui-form-item layui-col-md8">
                <div class="layui-input-block">
                    <?php echo $form->field($model,'isblank')->inline()->radioList(['1'=>'是','0'=>'否']) ?>
                </div>
            </div>
            <div class="layui-form-item layui-col-md8">
                <div class="layui-input-block">
                    <?php echo $form->field($model,'state')->inline()->radioList(['1'=>'正常','0'=>'禁用']) ?>
                </div>
            </div>
<div class="layui-form-item layui-col-md8">
<?php echo $form->field($model,'remark')->textArea([
    "class"=>"layui-input",
    "autocomplete"=>"off",
    "lay-verify"=>"required|email",
    "placeholder"=>"备注信息"]) ?>
</div>
<div class="layui-form-item">
    <div class="layui-input-block">
        <a onclick="menuAdd();" class="layui-btn"  lay-filter="formDemo">立即提交</a>
        <button type="reset" class="layui-btn layui-btn-primary">重置</button>
    </div>
</div>
<?php ActiveForm::end();?>

小弟请问在座的老师们,更新数据,通过POST提交一个表单,每次都要指定updateAll([‘name’=>$this->name,’pid’=>$this->pid,’isurl’=>$this->isurl,……],'{条件….}’),,,,,,,每个字段都要写进updateAll里面,如果我的表单有几十个值,那得写几十个参数~有没有什么办法能一次性修改为表单提交的所有值呢????

你使用的已经是

$form->field($model, 'attribute');

的形式了,应该清楚模型更新方式的吧。。。
片段代码如下
可以参考Gii 生成的 CRUD 中 update的源码
同意楼上说法

关于url路由规则,同一个路由,不同参数的规则问题[2.0]

Jadedear阅读(41)

WX20171214-225802@2x.png

这条规则 ,在参数都齐全的时候 是生效的,这是筛选,
product_2_0_0_0_1

但是有的时候 是没有筛选项的,只有一个page:
路由就变成这样了:
product/?page=2

我还是想要它变成是
product_0_0_0_0_2

这规则 要怎么写呢,

PS 另外再加一条规则 我已经试过了,不行呢
WX20171214-230203@2x.png

核查源码发现,确实没法直接通过规则 设置 相关参数的默认值。
但是 设置 多条规则的方法是可行的
可能是你用的版本比较老? 或者你可以 调整一下 规则的创建顺序,把包含默认值的规则放到前面。
如果还是不行,建议在 使用的地方 手动填充相关默认值,如
核查源码发现,确实没法直接通过规则 设置 相关参数的默认值。
但是 设置 多条规则的方法是可行的
可能是你用的版本比较老? 或者你可以 调整一下 规则的创建顺序,把包含默认值的规则放到前面。
如果还是不行,建议在 使用的地方 手动填充相关默认值,如

登录

找回密码

注册