2012-04-17 3 views
1

Использование торта 2.1.1. Я пытаюсь сделать задание cron для выполнения действия с контроллера. Каков правильный способ сделать это? У меня есть OfferController с действием admin_test. Я хотел бы запустить это действие каждые 2 часа. На данный момент я сделал оболочку в приложение/консоли/команды/SyncapiShell.php:CakePHP Shell, как использовать действие контроллера

class SyncapiShell extends AppShell { 
    public $uses = array('Offer'); 

    public function main() { 
     $this->Offer->admin_test(); 
    } 
} 

Но я получаю SQLSTATE [42000] Синтаксическая ошибка или нарушение прав доступа пытается выполнить оболочку. Я также использую маршрутизацию admin, компонент auth и ACL. Как работает оболочка? Он игнорирует права аутентификации и acl? Обычно действие admin_test может быть доступно только определенным пользователям, прошедшим проверку подлинности.

Спасибо вам

ответ

5

Нет это не правильный способ сделать, но более вероятно, сильный показатель того, что ваше приложение архитектуры не хорошо. У вас должны быть толстые модели и крошечные контроллеры.

Shell: uses будет работать как свойство использования контроллера и моделей загрузки. В контроллерах вы должны использовать ассоциации моделей, а не загружать тысячи моделей с использованием.

Восстановите свой метод контроллера и переместите код в модель предложения.

LayerCake

И почему оболочка требует аутентификации или маршрутизации администратора? Оболочка, как сказано в названии, представляет собой оболочную программу, а не веб-сайт. Аутентификация в основном выполняется ОС и пользователем, который запускает сценарий. Только люди, у которых есть доступ к оболочке, смогут ее запустить.

+0

Кажется, что я жил на другой планете до этого момента. Спасибо ... Я всегда думал, что модель должна быть тощей. Я всегда старался выполнять функцию и повторно использовать их, но теперь я хочу просмотреть всю мою структуру. Однако для проблемы использования я сделал это, как сказано на веб-сайте cakephp. Если в оболочке вы хотите использовать rmodel, вы должны использовать «uses» [link] (http://book.cakephp.org/2.0/ ru/console-and-shells.html) – slacky

+0

Это правильно для оболочки. Но в контроллере вы не хотите вызывать ненужные накладные расходы, добавляя множество моделей через свойство uses, но многие люди делают это по какой-то причине. – burzum

+0

Да, на самом деле я не использовал «использование» в контроллерах. Еще раз спасибо, я уже переустановил пару моделей с новой логикой. Ваш вклад был очень полезным. Теперь все начинает иметь больше смысла. – slacky

Смежные вопросы