Я использую CakePHP v2.6, и я пишу сценарий оболочки, который должен иметь несколько иные правила проверки, а затем те, которые имеют свойство $validates
модели.
Я прочитал раздел книги об изменении валидации "на лету", но все примеры взяты из одной модели. И когда я пытаюсь сделать $this->MyModel->validator()
в сценарии оболочки, я получаю:
Fatal Error Error: Call to undefined function validator()
Почему это?
Обновление: Как ни странно, работает следующий код:
unset($this->MyModel->validate['fieldName'] );
Мой код:
<?php
App::uses('AppShell', 'Console/Command');
App::uses('CakeSchema', 'Model');
class ScrapeShell extends AppShell {
public $uses = array('Listing', 'Neighborhood', 'ListingPhoto');
function __construct() {
parent::__construct();
//initialize some variables
}
public function myMethod() {
#bypass validation on description to allow HTML
unset($this->Listing->validate['description'] ); //this works
//$this->Listing->validator()->remove('description', 'noTags'); //this errors
...
По крайней мере, часть проблемы заключается в том, что вы нарушили конструкцию оболочки CakePHP.
Вам необходимо изменить свой метод __construct следующим образом:
public function __construct($stdout = null, $stderr = null, $stdin = null) {
parent::__construct($stdout, $stderr, $stdin);
//your code here
}
Что касается дочерних объектов модели, трудно сказать, что может мешать этому экземпляру, не видя ваш код модели, но если вы также перезаписали конструкторы моделей, это может помешать правильной настройке модели.
Вы уверены, что ваша оболочка и веб-приложение работают с одной и той же основной версией CakePHP? Попробуйте отладить CAKE_CORE_INCLUDE_PATH.
Я использую глобальную версию самостоятельно, поэтому, когда я просто называю "торт", она выполнит глобальную версию, если я вызову. \Bin\cake, она будет использовать одну из репо (3.0 в этом случае)
И вы уверены, что приложение находит правильную версию ядра? Вторая строка ядра, о которой идет речь, будет работать в любом случае, потому что она была там до 2.6. Я уверен, что в вашей модели нет правильной версии основного класса модели.
/Applications/MAMP/htdocs/myappname/lib