yii框架网址解析问题

转载请注明来自souldak,微博:@evagle

首先如果你在config/main.php里面没有配置urlManager的话,那么流程如下(摘自yii官网)

  1. 用户发出了访问 URL http://www.example.com/index.php?r=post/show&id=1 的请求,Web 服务器通过执行入口脚本index.php 处理此请求。
  2. 入口脚本创建了一个 应用 实例并执行。
  3. 应用从一个叫做 request 应用组件中获得了用户请求的详细信息。
  4. 应用在一个名叫 urlManager 的应用组件的帮助下,决定请求的 控制器 动作 。在这个例子中,控制器是 post,它代表 PostController 类;动作是 show ,其实际含义由控制器决定。
  5. 应用创建了一个所请求控制器的实例以进一步处理用户请求。控制器决定了动作show 指向控制器类中的一个名为 actionShow 的方法。然后它创建并持行了与动作关联的过滤器(例如访问控制,基准测试)。如果过滤器允许,动作将被执行。
  6. 动作从数据库中读取一个 ID 为 1Post 模型
  7. 动作通过 Post 模型渲染一个名为 show 视图
  8. 视图读取并显示 Post 模型的属性。
  9. 视图执行一些 小物件
  10. 视图的渲染结果被插入一个 布局
  11. 动作完成视图渲染并将其呈现给用户。
但是如果你已经配置了urlManager如下:

'urlManager'=>array(
            'urlFormat'=>'path',
            'rules'=>array(
                '<controller:\w+>/<id:\d+>'=>'<controller>/index',
                '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
                '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
            ),
        ),

那么直接访问http://www.example.com/index.php?r=post/show&id=1就不可能得到show action的结果了。首先这个请求会交给defaultController的indexAction处理,defaultController在main.php里制定,如果defaultController不是PostControler,你可能就会莫名其妙了。如果正好是的话,则会返回indexAction的内容,而不是showAction。

其实要访问这个也很简单,http://www.example.com/index.php/post/show?id=1就行了

因为urlManager已经设置成按照<controller>/<action>的形式


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ClickHouse是一个用于联机分析处理(OLAP)的列式数据库管理系统(DBMS),它支持高并发和高吞吐量的查询。在Yii框架中,可以使用ClickHouse扩展来连接和操作ClickHouse数据库。以下是使用Yii框架连接和操作ClickHouse数据库的步骤: 1. 安装ClickHouse扩展。可以使用Composer来安装ClickHouse扩展,命令如下: ``` composer require yandex/clickhouse-php ``` 2. 配置ClickHouse数据库连接。在Yii框架的配置文件中,添加ClickHouse数据库连接的配置信息,例如: ```php return [ // ... 'components' => [ // ... 'clickhouse' => [ 'class' => 'kak\clickhouse\Connection', 'dsn' => 'clickhouse://localhost:8123/default', 'username' => 'default', 'password' => '', ], ], ]; ``` 3. 使用ActiveRecord操作ClickHouse数据库。在Yii框架中,可以使用ActiveRecord来操作ClickHouse数据库。首先需要创建一个继承自`kak\clickhouse\ActiveRecord`的模型类,例如: ```php <?php namespace app\models; use kak\clickhouse\ActiveRecord; class MyModel extends ActiveRecord { public static function tableName() { return 'my_table'; } } ``` 4. 在模型类中定义ClickHouse数据库连接。如果需要使用不同的ClickHouse数据库连接,可以在模型类中覆盖`kak\clickhouse\ActiveRecord::getDb()`方法,例如: ```php <?php namespace app\models; use kak\clickhouse\ActiveRecord; class MyModel extends ActiveRecord { public static function tableName() { return 'my_table'; } public static function getDb() { return \Yii::$app->clickhouse2; } } ``` 5. 使用ActiveRecord查询ClickHouse数据库。在模型类中,可以使用ActiveRecord提供的查询方法来查询ClickHouse数据库,例如: ```php // 查询所有记录 $models = MyModel::find()->all(); // 查询符合条件的记录 $models = MyModel::find()->where(['status' => 1])->all(); // 查询记录总数 $count = MyModel::find()->count(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值