如何在Yii 2

时间:2016-12-06 06:01:33

标签: php yii2

我有以下代码,我想使用名为link而不是id的字段查找模型。但是,它似乎没有产生任何结果。我哪里可以弄错?它返回404

public function actionView($link)
    {
        $model = News::find()->where(['link'=>$link])->all();
        return $this->render('view', [
            'model' => $model,
        ]);
    }

注意:在搜索模型中,我尝试添加此内容:

 $query->andFilterWhere([
            'id' => $this->id,
            'link'=>$this->link,
            'category' => $this->category,
            'date' => $this->date,
            'userid' => $this->userid,
            'featured' => $this->featured,
        ]);

5 个答案:

答案 0 :(得分:2)

如果你想要一个模型,你需要一个()而不是全部()

public function actionView($link)
{
    $model = News::find()->where(['link'=>$link])->one();
    return $this->render('view', [
        'model' => $model,
    ]);
}

使用one()方法只需要检索一个模型,并在$ model中获得所需的数据。

如果您起诉所有()谎言,您确实要检索一组模型并访问单个模型,您必须设置正确的索引,例如:

$my_model = $model[0];

答案 1 :(得分:1)

在UrlManager配置中你可以拥有:

'<controller>/<action>/<id:\d+>' => '<controller>/<action>',

这意味着默认重写规则使用id作为参数,并且必须为数字,因此您无法使用controller/view/link。为确保这一点,请将操作名称从actionView更改为actionTest,然后调用网址controller/test?link=linklink

其他解决方案是使用以下网址:controller/view?link=linklink

答案 2 :(得分:1)

问题出在你的网址

案例1)

http://localhost/projectName/backend/web/controllerName/actionName/username/rushil

提供输出:未找到(#404)

案例2)

http://localhost/projectName/backend/web/controllerName/actionName/rushil

提供输出:未找到(#404)

案例3)

http://localhost/projectName/backend/web/controllerName/actionName?username=rushil

这将有效。

解决方案:检查您的网址并在网址中传递链接参数,如案例3所示

答案 3 :(得分:0)

404表示网址管理员找不到您的操作。 link参数必须位于网址(http://yourapp/controller/view?link=something)中,因为您将其定义为actionView($link)

请求http://yourapp/controller/view会给您404错误。

答案 4 :(得分:0)

对于可能遇到此类错误的任何人,问题是在使用漂亮的网址后,您需要添加规则来映射网址格式。 template <class T> int frequency(T array[], std::size_t arraySize, T item) { int count = 0; for (std::size_t i = 0; i < arraySize; i++) { if (array[i] == item) { count++; } } return count; } 下的C:\xampp\htdocs\your_project\frontend\config\main.php添加如下规则:

urlManager