RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 554108
Accepted
Maybe_V
Maybe_V
Asked:2020-08-11 01:41:00 +0000 UTC2020-08-11 01:41:00 +0000 UTC 2020-08-11 01:41:00 +0000 UTC

如何自动生成路径?

  • 772

怎么实现,在不指定任何参数的情况下,切换到controller时,形成一定的路径!

例如,当用户在命令行输入http://user/index?id=或http://user/index?自动生成路径时http://user/index?id=mainpage&user=1

这是通过什么方式实现的?

行动

public function actionIndex()
    {
        $currentUser = null;
        if (Yii::$app->user->isGuest || Yii::$app->request->isGet) {
            if ($id = Yii::$app->request->get('id')) {
                $currentUser = User::find()->where(['nick_name' => $id])->one();
            }
        }
        if (!Yii::$app->user->isGuest ) {
            if (Yii::$app->request->get('id') == Yii::$app->user->identity->nick_name || Yii::$app->request->get('id') ==  null ) {
                $currentUser = User::find()->where(['nick_name' => Yii::$app->user->identity->nick_name])->one();
            }
        }
        return $this->render('index', [
            'currentUser' => $currentUser,
        ]);
    }
php
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    oakymax
    2020-08-17T19:17:48Z2020-08-17T19:17:48Z

    如果您希望路径完全在浏览器行中形成,请使用重定向:

    return $this->redirect(['user/index', 'id' => 'mainpage', 'user' => 1]);
    

    长话短说;博士;

    如果您对默认参数感兴趣,那么您可以通过路由或直接在控制器中执行此操作。

    通过路由的默认参数

    在应用程序配置中:

    $config = [
        'components' => [
            'urlManager' => [
                'enablePrettyUrl' => true,
                'showScriptName' => false,
                'rules' => [
                    // other rules
                    ['verb' => 'GET', 'pattern' => 'user/index', 'route' => 'user/index', 'defaults' => ['id' => 'mainpage', 'user' => 1]],
                ]
            ]
        ],
    ];
    

    控制器中的默认参数

    我建议$currentUser您仍然需要按参数搜索$user

    $input = DynamicModel::validateData([
        'id' => \Yii::$app->request->get('id', 'mainpage'), // вторым параметром -- значение по-умолчанию
        'user' => \Yii::$app->request->get('user', \Yii::$app->user->isGuest ? '1' : \Yii::$app->user->identity->nick_name),
        // тут вторым параметром идет значение по-умолчанию, которое зависит от условия
        // через routing так сделать не получится
    ], [
        ['user', 'exist', 'targetClass' => User::className(), 'targetAttribute' => 'nick_name'],
        // можно добавить другие валидаторы
        // http://www.yiiframework.com/doc-2.0/guide-input-validation.html#ad-hoc-validation
    ]);
    
    if ($input->hasErrors()) {
        // что-нибудь на случай ошибки, например redirect на 404
    }
    
    return $this->render('index', [
        'currentUser' => User::findOne(['nick_name' => $input->user]),
        'id' => $input->id
        // это как я понимаю page ID, так что здесь скорее будет что-то типа Page::findOne($input->id)
        // ну и соответствующий валидатор тогда нужен выше
    ]);
    

    当然,我会推荐第二种选择,因为。有机会更灵活地配置默认参数。

    我还想指出,您的代码中有很多......奇怪的地方:

    1. 控制器中的参数user不会以任何方式使用(除非你在路由中以某种方式处理它,这是不可能的)
    2. currentUserid由语义上意味着的参数搜索nick_name
    3. 未经授权的用户可以使用any 进入该页面id,而授权用户只能进入他自己的页面
    4. 如果未授权用户传递了不正确的id,则显示view with $currentUser === null(对于授权用户,如果$id不为空且不等于nick_name当前用户,将一直出现这种情况)
    5. 未经授权的用户只能$currentUser通过 HTTP 方法进行搜索GET,授权用户 - 通过任何 HTTP 方法

    在上面的例子中,其中一些奇怪的地方得到了纠正。

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5