Извините за общее название. Я не лучший в титулах.
В любом случае, то, как Cake передает данные (в виде хэша), в значительной степени является причиной, по которой мне даже нужно задать этот вопрос. Если бы я передал переменную/объект из контроллера в представление, это был бы объект, которому я мог бы задавать вопросы (т.е. $duck->quack() ), а не массив/словарь (т.е. $duck[' Duck']['quack'] == true) это было бы легко.
В моем приложении есть список элементов, которыми пользователь x может владеть или не владеть. В некоторых представлениях я отображаю все элементы в базе данных/приложении (т. е. разбиваю на страницы), и для каждого элемента мне нужно знать, владеет ли он вошедшим в систему пользователем или нет. Чтобы ответить на этот вопрос, мне нужно выполнить запрос (из-за сложных отношений HABTM), который выполняется внутри модели. Другими словами, в моей модели Item есть функция isOwnedByUser($user_id, $item_id), которая истинна, если она принадлежит пользователю. Я хочу вызвать эту функцию из представления.
Естественно, это нарушает структуру MVC, но я не знаю, как еще это сделать. У меня было четыре идеи:
Идея 1:
Сделайте это внутри помощника:
App:Import('Model','Item');
$item = new Item();
$item->isOwnedByUser($user_id,$item_id);
и вызовите помощника из представления (и, конечно же, передайте $item_id и $user_id). Но это ДЕЙСТВИТЕЛЬНО нарушает структуру MVC.
Идея 2:
Создайте действие внутри item_controller.php и вызовите действие из представления, используя requestAction(). Но я слышал, что это было крайне неэффективно
Эти две идеи я нашел, когда был ищу решение моей проблемы, но, по их мнению, эти две идеи плохие, поэтому я придумал еще два решения:
Идея 3:
При возврате данных с разбивкой на страницы в представление я могу убедиться, что все элементы имеют ключ «user_id», чтобы я мог проверить ключ в представлении по идентификатору вошедшего в систему пользователя, чтобы узнать, владеет ли он/она элементом. Но для этого потребуется: а) мне переписать нумерацию страниц б) очень уродливые запросы, особенно для определенных представлений (поиск), в) общее уродство и медлительность. Поэтому я решил отказаться от этой идеи
Идея 4:
Каждый раз, когда представлению нужно знать, принадлежит ли элемент пользователю, я просто передаю другой массив из контроллера, который содержит ВСЕ элементы, которыми владеет пользователь, и в представлении вы можете просто использовать in_array(), чтобы проверить, принадлежит ли пользователь указанный пункт. Конечно, проблема очевидна: что, если у пользователя много элементов?
Короче говоря, я застрял в этом, и я понятия не имею, куда идти отсюда, и я был бы признателен за любую помощь! Спасибо!