谁一开始就是大神?

PHP 第67页

PHP

关于重写路由规则总是出现404错误的问题[2.0]

Kindpony阅读(81)

第一步,配置config/main.php里面components的静态启用和路由规则启用

'urlManager' => [
    'enablePrettyUrl' => true,  //启用路由   
    'enablePrettyUrl' => true, // 启用 URL美化   
    'showScriptName' => false,//禁用 index.php
    'suffix'=>'.html',
    'rules'=>[
        '<controller:poor-per-info>/<action:get-area-list>/<pid:\d+>.html'=>'<controller>/<action>',
    ],
],

第二步按酱油老师说的配置那个hatccess文件

RewriteEngine on

# 如果是一个目录或者文件,就访问目录或文件
RewriteCond %{REQUEST_FILENAME} !-d

# 如果文件存在,就直接访问文件,不进行下面的RewriteRule
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule . index.php

第三步:然后我通过这个地址就总是出现404错误呢

http://www.demo.com/poor-per-info/get-area-list/2.html?_=1457167371875

但是我通过这个地址来测试就是正常访问200OK的成功页呢:

http://www.demo.com/poor-per-info/get-area-list.html?_=1457167440517

我只是多了一个pid的参数而已,怎么就总是出现404错误的呢?

我该配置的两个地方都是配置了的, 是不是还要在PoorPerInfo控制器里加个use yii\web\urlManager,但是我觉得这样肯定不对!

求大神们指导一下,还有什么地方需要配置的

pid 后面的 .html 就不要了,
suffix 就是后缀了。

获取不到微信服务post的xml数据[2.0]

BraveFox阅读(68)

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];获取不到微信服务器post给我的xml数据
在网上查了下另一种写法
$postStr = file_get_contents('php://input');就可以获取到了
什么原因?
这个$GLOBALS是可以打印的,应该不是register_globals禁止的问题吧

xml的content-type是application/xml,$_POST($GLOBALS["HTTP_RAW_POST_DATA"])都只能解析Content-Type:application/x-www-form-urlencodedContent-Type: multipart/form-data,而php://input的内容包括除了header之外的所有请求内容,无论任何content-type

怎么限制usermodule必须登录才能访问[2.0]

Elliesuper阅读(67)

frontend/modules/user/Module.php
namespace frontend\modules\user;
class Module extends \yii\base\Module
{
    public $controllerNamespace = 'frontend\modules\user\controllers';

    public function init()
    {
        parent::init();

        //该模块必须登陆用户访问
        if (\Yii::$app->user->isGuest){
            return \Yii::$app->response->redirect(\Yii::$app->homeUrl);
        }

        return true;
    }
}
return \Yii::$app->response->redirect(\Yii::$app->homeUrl);

这端代码能执行,就是不能跳转

下面是在controller里面实现的逻辑
Application.php

public function beforeAction($action)
{
        if (!parent::beforeAction($action)) {
            return false;
        }

        if (Yii::$app->user->isGuest){
            return $this->redirect(['site/index']);
        }

        return true;
}

同样能执行到跳转这边,就是跳转不来

解决方案

user module 所有controller都会继承该ApplocationController

<?php
namespace frontend\modules\user\controllers;

use Yii;
use yii\web\Controller;

class ApplicationController extends Controller
{
    public function beforeAction($action)
    {
        if (!parent::beforeAction($action)) {
            return false;
        }

        if (Yii::$app->user->isGuest){
            return $this->goHome()->send();//这边需要家send(),不然无法跳转,Yii 2.0.7
        }

        return true;
    }
}

个人感觉逻辑不太对,登录认证应该在控制器中就控制了,而不是应该在模型中去判断,请求肯定是先到控制器,然后对应的action中进行处理,action负责加载一个数据模型,一般是从数据库中加载。那么,如果这个用户没有登录,应该在加载模型之前就判断好
return $this->goHome();
module.php
可以实现跳转。
我的头头解释的。
redirect可能有点类似于异步,在本地速度快,马上返回了302跳转,然后再return
线上网速慢,本地还没收到302跳转,就return了,init收到return后,就会继续往下执行

使用\Yii::$app->user->isGuest;登陆前状态为1登陆后如下报错[2.0]

Bobdear阅读(76)

使用\Yii::$app->user->isGuest; 登陆前状态为1 登陆后 重新返回刷新登陆页面 就以下报错
没有user表,我数据库表是users。但是这个user是在哪里调用的?
Database Exception – yii\db\Exception

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'qichunzhan.user' doesn't exist
The SQL being executed was: SELECT * FROM `user` WHERE (`id`='1') AND (`status`=10)
Error Info: Array
(
    [0] => 42S02
    [1] => 1146
    [2] => Table 'qichunzhan.user' doesn't exist
)
↵
Caused by: PDOException

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'qichunzhan.user' doesn't exist

in /Users/chenqi/NetBeansProjects/WEB/GitOschina/qichunzhan/vendor/yiisoft/yii2/db/Command.php at line 839

去User模型里把表改成users
那个user表最好不要动,楼主,除非熟悉了再动,我吃过很多亏.
应该在 common/models/user.php 在这里看看登录的
也有可能在你的loginform里面

yii2怎么设置网站logo?[2.0]

youthpony阅读(72)

yii2 怎么设置网站logo

在/layouts/main.php中如下定义
我的为什么不行啊,还是yii自带的logo
已解决,谢谢

我想问一下关于命名空间的事,麻烦了解的人进来看一下[2.0]

Bobelephant阅读(81)

命名空间
比如yii2.0某个控制器里要调用系统自带的控制器
use yii/web/Controller
请问这个后半部分是路径吗?
但是我查了一下这个文件,它是在’XXX/yii2/web/controller’这个目录下,它自己里面写的命名空间是namespace yii/web
这个倒是和使用时是对应的,可是却不是路径啊,就算是路径应该也是yii2/web/ 但是我两边都改成yii2却是出现问题,麻烦哪位明白的朋友跟我说一下命名空间这一块,谢谢了

yii2的命名空间完全取决于别名!多了解一下别名,就知道具体是怎么自动加载的了。楼上几个木说到点上。
还可以参见一下这个地址:http://www.yiichina.com/tutorial/395 里面写的很详细。
命名空间 跟路径应该没啥关系吧,它想怎么命名就怎么命名。
yii2的命名空间是根据它文件自己的命名空间决定怎么调用的。比如:就像你说的,use yii/web/Controller,它是在XXX/yii2/web/controller这个目录下,它自己写的命名空间是namespace yii/web,那么在其他的控制器中调用的话,命名空间就是:它自己的命名空间,加上它是属于什么文件。比如:它是属于控制器的,那么调用时的命名空间就是:文件自己的命名空间/文件类型(Controller/Model)。你可以在仔细看看,或者你看看第三方类是怎么调用的,它们的命名空间是如何写的,自己再试试,就找到感觉了。

高级怎么实现前后台分离?[2.0]

Hazellovely阅读(79)

类似这样的 
前台:http://www.demo.com/index.php
后台:http://www.demo.com/admin.php

我用的是该高级版,有front和backend两个模块,不会配置,求教!

你把www.demo.com所指向的目录配置到advanced目录下,
那么访问后台:http://www.demo.com/backend/web/index.php
访问到前台:http://www.demo.com/frontend/web/index.php
但是这样,url就比较长了,所以,你最好分配两个域名,比如后台域名为:backend.demo.com,然后这个域名目录直接指向到advanced/backend/web目录下,那么你访问的时候:http://backend.demo.com/index.php 就访问到后台
前台配置也类型,比如域名为frontend.demo.com,然后这个域名目录直接指向到advanced/frontend/web目录下,那么你访问的时候:http://frontend.demo.com/index.php 就访问到前台
生产环境中,这种方式用的也不少,一般把域名配置到公司首页,比如:www.demo.com,然后公司的管理后台用二级域名。
当然,还有其他的解决方案。看你习惯配置成哪种。
如果是本地环境,可以通过配置hosts文件,也可以通过端口来区分。
其实很好处理的,已经内置给你考虑周到了

debug出来的信息为什么有的重复,有的却不重复呢??[2.0]

ecycrab阅读(74)

debug出来的信息为什么有的重复,有的却不重复呢?? 我并没有将一个方法执行多次。

1

15:18:27.722	0.5 ms	SELECT	SELECT * FROM `config_items` WHERE (`name`='site_logo') AND (`categoryid`=1)
/var/www/html/1.php (83)
/var/www/html/index.php (78)
/var/www/html/RoomController.php (114)
[+] Explain

2

15:18:27.724	0.4 ms	SELECT	SELECT * FROM `config_items` WHERE (`name`='site_logo') AND (`categoryid`=1)
/var/www/html/1.php (83)
/var/www/html/index.php (78)
/var/www/html/RoomController.php (114)

345.png

系统里有好多关联操作,比如你进行一个操作时需要验证你是否已登录,是否是管理员等等.

请问小伙伴们Girdview列表行如何居中[2.0]

Anielephant阅读(84)

我要居中

我知道有一个属性可以设置行样式,但是这个属性代表了全部行的样式
‘rowOptions’=>[‘class’=>’text-center’],//行样式

其实我就是想让某列居中,不希望全部居中! 请问小伙伴们,有招解决不?

有一个headerOptions 的属性,
http://www.yiichina.com/doc/api/2.0/yii-grid-column#$headerOptions-detail
你可以去看看~
追代码 从源头解决 yii2 我发现这些问题都是由 Options 来设置的
。。。。。。

登录

找回密码

注册