我正在学习Yii Framework。我第一次使用框架,我需要一些建议。 我的控制器上有一个getSocials()函数。
private function getSocials($id)
{
$socials=Socials::model()->find("socials_user=$id");
foreach ($socials as $social)
{
$type = $social["socials_type"];
$allSocial .= "<li><a href=\"#\" rel=\"nofollow\">$type</a></li>";
}
return $allSocial;
}
(它是私有的,因为我只是从另一个函数调用它)。 我将逐行解释,
$socials=Socials::model()->find("socials_user=$id");
通过 Socials 模型从数据库获取socials_user collumn等于 $ id 的数据。
foreach ($socials as $social)
$ socials作为数组返回,因为在数据库中有几行socials_user collumn等于 $ id 。
$allSocial .= "<li><a href=\"#\" rel=\"nofollow\">$type</a></li>";
在foreach循环中,将<li>...</li>
添加到字符串的结尾,因此 $ allSocial 将为<li>...</li><li>...</li>...
BUt我得到未定义的变量:allSocial 错误。当我从等号( = )的前面删除 dot 时,它正在工作。但是这次是在foreach循环中,它总是被覆盖,最后 $ allSocial 只包含最后<li>...</li>
有任何逻辑错误吗?
答案 0 :(得分:5)
$allSocial
未在任何地方定义,您无法将字符串附加到未定义的变量。试试这样:
private function getSocials($id)
{
$socials=Socials::model()->find("socials_user=$id");
$allSocial = '';
foreach ($socials as $social)
{
$type = $social["socials_type"];
$allSocial .= "<li><a href=\"#\" rel=\"nofollow\">$type</a></li>";
}
return $allSocial;
}
答案 1 :(得分:1)
在尝试将任何内容连接到它之前,您需要定义$allSocial
。您可能还需要考虑返回一个数组,以便轻松访问不同的字符串。
private function getSocials($id) { $socials=Socials::model()->find("socials_user=$id"); $allSocial = array(); foreach ($socials as $social) { $type = $social["socials_type"]; $str = "<li><a href=\"#\" rel=\"nofollow\">$type</a></li>"; array_push($allSocial, $str); } return $allSocial; }
答案 2 :(得分:1)
find函数将只返回一个不是数组的记录,因此foreach永远不会执行 用以下代码替换代码以使其正常工作:
private function getSocials($id)
{
$socials=Socials::model()->findAll('socials_user=:socials_user',
array(':socials_user'=>1));
$allSocial = '';
foreach ($socials as $social)
{
$type = $social["socials_type"];
$allSocial .= "<li><a href=\"#\" rel=\"nofollow\">$type</a></li>";
}
return $allSocial;
}