CakePHP, как изменить проверку из сценария оболочки

0

Я использую 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
       ...
  • 0
    Возможно, вам следует вставить свой (соответствующий) код этой оболочки.
  • 0
    @mark Марк добавил код
Показать ещё 2 комментария
Теги:
validation
cakephp
cakephp-2.0

2 ответа

1
Лучший ответ

По крайней мере, часть проблемы заключается в том, что вы нарушили конструкцию оболочки CakePHP.

Вам необходимо изменить свой метод __construct следующим образом:

public function __construct($stdout = null, $stderr = null, $stdin = null) {
    parent::__construct($stdout, $stderr, $stdin);
    //your code here
}

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

0

Вы уверены, что ваша оболочка и веб-приложение работают с одной и той же основной версией CakePHP? Попробуйте отладить CAKE_CORE_INCLUDE_PATH.

Я использую глобальную версию самостоятельно, поэтому, когда я просто называю "торт", она выполнит глобальную версию, если я вызову. \Bin\cake, она будет использовать одну из репо (3.0 в этом случае)

И вы уверены, что приложение находит правильную версию ядра? Вторая строка ядра, о которой идет речь, будет работать в любом случае, потому что она была там до 2.6. Я уверен, что в вашей модели нет правильной версии основного класса модели.

  • 0
    Когда я повторяю это из командной строки, я получаю: /Applications/MAMP/htdocs/myappname/lib
  • 0
    Вы уверены, что приложение находит правильную базовую версию? Вторая строка рассматриваемого ядра будет работать в любом случае, потому что она была там до 2.6.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню