Логическая ошибка в ООП - PullRequest
2 голосов
/ 19 июня 2011

Я изучаю 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_user равен $ id , через Socials модель.

foreach ($socials as $social)

$ socials возвращается как массив, потому что есть несколько строк, для которых столбец socials_user равен $ id в базе данных.

$allSocial .= "<li><a href=\"#\" rel=\"nofollow\">$type</a></li>";

В цикле foreach добавление <li>...</li> в конец строки, поэтому $ allSocial будет <li>...</li><li>...</li>...

Но я получаю Неопределенная переменная: allSocial Ошибка. Когда я удаляю точка спереди символ равенства ( = ), это работает. Но на этот раз в цикле foreach он всегда перезаписывается и, наконец, $ allSocial , содержащий только последний <li>...</li>

Есть ли логическая ошибка?

Ответы [ 3 ]

5 голосов
/ 19 июня 2011

$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 голос
/ 19 июня 2011

Функция поиска вернет только одну запись, которая не является массивом, поэтому 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;
}
1 голос
/ 19 июня 2011

Вам нужно определить $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; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...