我有以下代码,我想使用名为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,
]);
答案 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