Symfony2 — проблема с использованием usort внутри контроллера

Я пытаюсь объединить содержимое двух массивов, а затем использовать usort, чтобы получить сообщения с наибольшим количеством просмотров.

Попытка использовать usort для сортировки содержимого массива.

Получаю следующую ошибку: ("Notice: Undefined property: Acme\DemoBundle\Entity\Article::$getViews in /.../PageController.php line 15")

Может ли кто-нибудь указать, что я делаю неправильно?

Функция сортировки внутри контроллера

private static function popularSort($articles, $posts, $articles2, $posts2)
{
    return $articles->getViews() == $posts->getViews() ? 0 : ( $articles->getViews() < $posts->getViews()) ? 1: -1;
}

Действие на боковой панели

$articles = $this->getDoctrine()->getRepository('AcmeDemoBundle:Article')
    ->getArticles();

$posts = $this->getDoctrine()->getRepository('AcmeDemoBundle:Post')
    ->getPosts();

$popular = array_merge($articles, $posts);

usort($popular, array($this, 'popularSort'));

person jovah    schedule 17.07.2014    source источник


Ответы (2)


У вас нет свойства с именем getViews в вашем классе Article.

Вероятно, у вас есть свойство с именем views и метод getViews, что означает, что вы должны вызывать фактический метод со скобками, например $article->getViews().

person qooplmao    schedule 17.07.2014

getViews — это метод получения для доступа к представлениям свойств сущностей Post и Article. Поэтому при доступе к нему вы должны обращаться к нему как $articles->getViews().

Но если вы просто хотите сравнить свойство views двух объектов, сравните их, используя имя их свойства вместо их получателя

Принимая представления в качестве имени свойства, вызов должен быть примерно таким:

$posts->views и $articles->views.

person Ankit Khedekar    schedule 17.07.2014
comment
Спасибо за объяснение, Ankit, но Qoop был первым. - person jovah; 17.07.2014
comment
На самом деле сейчас я пытаюсь добавить к этому еще 2 объекта. Но получаю ошибку. popularSort function--return $articles->getViews() == $posts->getViews() && $articles2->getViews() == $posts2s->getViews() ? 0 : ( $articles2->getViews() < $posts2->getViews() && $predictions->getViews() < $scorings->getViews()) ? 1: -1; и я получаю эту ошибку: "Warning: Missing argument 3 for Acme\DemoBundle\Controller\PageController::popularSort() Есть идеи? - person jovah; 17.07.2014
comment
Эта проблема обычно возникает из-за несоответствия в определении функции и вызове функции. Функция, которую вы вставили в комментарий выше, похоже, не работает. Я бы предложил опубликовать новый вопрос. Или ищите существующий вопрос на этом сайте - person Ankit Khedekar; 17.07.2014
comment
Ошибка не там, где вы определили функцию, а в том, где вызывается эта функция. Функция ожидает больше параметров, чем фактически передается - person Ankit Khedekar; 17.07.2014
comment
Хм, я обновил array_merge, чтобы включить два других массива, что мне не хватает в usort? - person jovah; 17.07.2014
comment
Добавлен новый вопрос, если вы можете мне помочь? stackoverflow .com/questions/24800238/ - person jovah; 17.07.2014