Используя оболочки CakePHP, вы должны иметь доступ ко всем моделям и контроллерам вашего приложения CakePHP.
В качестве примера я настроил простую модель, контроллер и скрипт оболочки:
/ приложение / модели / post.php
<?php
class Post extends AppModel {
var $useTable = false;
}
?>
/ приложение / контроллеры / posts_controller.php
<?php
class PostsController extends AppController {
var $name = 'Posts';
var $components = array('Security');
function index() {
return 'Index action';
}
}
?>
/ приложение / производители / раковины / post.php
<?php
App::import('Component', 'Email'); // Import EmailComponent to make it available
App::import('Core', 'Controller'); // Import Controller class to base our App's controllers off of
App::import('Controller', 'Posts'); // Import PostsController to make it available
App::import('Sanitize'); // Import Sanitize class to make it available
class PostShell extends Shell {
var $uses = array('Post'); // Load Post model for access as $this->Post
function startup() {
$this->Email = new EmailComponent(); // Create EmailComponent object
$this->Posts = new PostsController(); // Create PostsController object
$this->Posts->constructClasses(); // Set up PostsController
$this->Posts->Security->initialize(&$this->Posts); // Initialize component that's attached to PostsController. This is needed if you want to call PostsController actions that use this component
}
function main() {
$this->out($this->Email->delivery); // Should echo 'mail' on the command line
$this->out(Sanitize::html('<p>Hello</p>')); // Should echo <p>Hello</p> on the command line
$this->out($this->Posts->index()); // Should echo 'Index action' on the command line
var_dump(is_object($this->Posts->Security)); // Should echo 'true'
}
}
?>
Весь скрипт оболочки демонстрирует, что вы можете иметь доступ к:
- Компоненты, которые вы загружаете напрямую и которые не загружаются через контроллер
- Контроллеры (сначала импортируйте класс Controller, затем импортируйте свой собственный контроллер)
- Компоненты, используемые контроллерами (После создания нового контроллера запустите метод
constructClasses()
, а затем метод initialize()
конкретного компонента, как показано выше.
- Основные служебные классы, такие как класс Sanitize, показанный выше.
- Модели (просто включите в свойство
$uses
вашей оболочки).
Ваша оболочка может иметь метод запуска, который всегда запускается первым, и метод main, который является основным процессом ваших сценариев оболочки и который запускается после запуска.
Чтобы запустить этот скрипт, вы должны ввести /path/to/cake/core/console/cake post
в командной строке (возможно, придется проверить правильный способ сделать это в Windows, информация находится в книге CakePHP (http://book.cakephp.org).
Результат приведенного выше скрипта должен быть:
mail
<p>Hello</p>
Index action
bool(true)
Это работает для меня, но, возможно, люди, которые более продвинуты в оболочках CakePHP, могли бы предложить больше советов или, возможно, исправить некоторые из вышеперечисленных ... Однако я надеюсь, что этого достаточно, чтобы вы начали.