Nano Hash - криптовалюты, майнинг, программирование

глобальная переменная контроллера не работает

Я использую CakePHP 2.4.1 и PHP 5.5.3.

Я прочитал здесь о том, как создать/записать/получить доступ к глобальной переменной, но это не работает для меня. Я делаю что-то вроде этого:

class SploopsController extends AppController {
    public $crung;

    public function process() {
        $this->crung = 'zax';
    }

    public function download() {
        $this->response->body($this->crung);
        $this->response->type('text/plain');
        $this->response->download('results.txt');
        return $this->response;
    }
}

Но загруженный файл results.txt пустой, т.е. $this->crung пустой. (Если я заменю $this->crung простой строкой, такой как 'Granjo', она будет работать так, как задумано.) Кто-нибудь знает, что происходит не так?

Кроме того, Configure::write и Configure::read у меня тоже не работают (если я вызываю каждый из них в функции контроллера).

Вот контекст: я создаю массив с результатами запроса в process() и отображаю их в process.ctp, и я хочу иметь кнопку, которая может загружать эти результаты в текстовый файл в более удобном для текста формате. Итак, я хочу создать глобальный массив, который я могу изменить в процессе(), а затем получить доступ к загрузке().

Спасибо!


Ответы:


1

Просто позвоните procees перед установкой

public function download() {
    $this->process();
    $this->response->body($this->crung);
    $this->response->type('text/plain');
    $this->response->download('results.txt');
    return $this->response;
}

Изменить

public function process() {
    if (!empty($this->request->data)) { // assuming you're processing the user entered data by means of post
        $this->Session->write('crung', 'zax');
        $this->Session->write('data', $this->request->data);
    }
}

public function download() {
    $this->crung = $this->Session->read('crung');
    $data = $this->Session->read('data'); // you can process the data in the way you want.

    $this->response->body($this->crung);
    $this->response->type('text/plain');
    $this->response->download('results.txt');
    return $this->response;
}
07.11.2013
  • хорошая идея, но process() использует введенные пользователем данные, которых больше не существует, когда я вызываю их из download(). 07.11.2013
  • Почему бы вам не опубликовать введенные пользователем данные в действие download? 07.11.2013
  • Я рассмотрел это, сложно передать массив (особенно потенциально большой массив) из представления обратно в контроллер. 07.11.2013
  • вы можете сериализовать массив перед сохранением в сеансе и получить значение, десериализовав его. 07.11.2013
  • Хорошо, я думаю, я попробую это. Я просто хотел убедиться, что нет более легкой альтернативы. Спасибо! 07.11.2013
  • Это сработало. Принятие вашего ответа на комментарий о сериализации переменной сеанса. 07.11.2013
  • хм, да, теперь я отредактировал свой ответ, спасибо за информацию :) @ AD7six 14.06.2014

  • 2

    вам нужно вызвать функцию process() перед использованием $this->crung, как показано ниже

    public function process() {
        $this->crung = 'zax';
    }
    
    public function download() {
        $this->process();
        $this->response->body($this->crung);
        $this->response->type('text/plain');
        $this->response->download('results.txt');
        return $this->response;
    }
    

    иначе вы можете использовать функцию beforeFilter(), которая будет вызываться перед вашей функцией download(). Это полезно, когда вам нужно присвоить значения

    public function beforeFilter()
    {
         $this->crung = 'zax';
    }
    
    07.11.2013
  • хорошая идея, но process() использует введенные пользователем данные, которых больше не существует, когда я вызываю их из download(). 07.11.2013
  • так что download() сразу после метода process()? 07.11.2013
  • Используйте прямой метод загрузки для обработки введенных данных. 07.11.2013
  • затем вызовите функцию загрузки() внутри метода process(). 07.11.2013
  • process() переводит их на экран, где они видят свои данные в красивой таблице. Затем, если им нужны необработанные текстовые данные, оттуда они могут нажать на ссылку для загрузки. 07.11.2013
  • сеанс не позволяет мне хранить массивы, только отдельные переменные. 07.11.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..