jpegcam переопределить actions, файл записи с фотографией

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
pprisn
Сообщения: 3
Зарегистрирован: 2017.04.23, 09:44

jpegcam переопределить actions, файл записи с фотографией

Сообщение pprisn »

Всем добрый день.
Подскажите пожалуйста, каким образом возможно используя расширение jpegcam переопределить
'filepath'=> Yii::app()->basePath."/../uploads/user.jpg", // This could be whatever
в логике приложения.

Пробовал задавать глобальную переменную в контроллере UserController
public $filepath='Yii::app()->basePath."/../uploads/user.jpg';
далее изменяя значение переменной по смыслу приложения
$this->filepath и выполняю новую фотографию
файл с фотографией записывается с именем значение которого было записано первоначально при объявлении $filepath

Как можно переопределить actions() или передать новое значение имени файла в jpegcam ??????




<?php

class UserController extends Controller
{
public $filepath='Yii::app()->basePath."/../uploads/user.jpg';

public function actionIndex()
{
$this->render('index');
}

public function actionNewPhoto()
{
$this->render('newPhoto');
}

public function actionSaveJpg()
{
$this->render('saveJpg');
}

public function actions()
{
return array(
'jpegcam.'=> array(
'class'=>'application.extensions.jpegcam.EJpegcam',
'saveJpg'=>array(
'filepath'=> $this->filepath, // This could be whatever
)
)
);
}

}

--------------
newPhoto.php

<?php
$this->breadcrumbs=array(
'User'=>array('/user'),
'New Photo',
);?>
<h1>Новая фотография</h1>

<?php $onBeforeSnap = "document.getElementById('upload_results').innerHTML = '<h1>Uploading...</h1>';";
$completionHandler = <<<BLOCK
if (msg == 'OK') {
document.getElementById('upload_results').innerHTML = '<h1>OK! ...запись фотографии, ожидайте 3 снкунды</h1>';

// reset camera for another shot
webcam.reset();
setTimeout(function(){window.location = "index.php?r=user/index";},3000);
}
else alert("PHP Error: " + msg);
BLOCK;
$this->widget('application.extensions.jpegcam.EJpegcam', array(
'apiUrl' => 'index.php?r=user/jpegcam.saveJpg',
'shutterSound' => false,
'stealth' => true,
'buttons' => array(
'configure' => 'Конфигурация',
'takesnapshot' => 'Сделать снимок!',
//'freeze' => 'Capture',
//'upload' => 'Upload',
//'reset' => 'Reset'
),
'onBeforeSnap' => $onBeforeSnap,
'completionHandler' => $completionHandler
)); ?>

<div id="upload_results" style="background-color:#eee; margin-top:10px"></div>

-------------------
saveJpg.php

<?php
$this->breadcrumbs=array(
'User'=>array('/user'),
'SaveJpg',
'filetaph' => $_GET['fileimg'],
);?>
<h1><?php echo $this->id . '/' . $this->action->id; ?></h1>

<p>
You may change the content of this page by modifying
the file <tt><?php echo __FILE__; ?></tt>.
</p>
pprisn
Сообщения: 3
Зарегистрирован: 2017.04.23, 09:44

Re: jpegcam переопределить actions, файл записи с фотографией

Сообщение pprisn »

Решение следующее, как всегда на этапе обучения проясняется логика работы YII , не без добрых людей найден ответ.

Сохранять контекст между запросами - нужно пользоваться механизмом сессий
или передавать все переменные контекста явно в запросе.

Т. е.

Либо явно в actions указать значение новое 'filepath'=> '/tmp/user'.date('YmdHis').'.jpg'
public function actions()
{

$filepath =
return array(
'jpegcam.'=> array(
'class'=>'application.extensions.jpegcam.EJpegcam',
'saveJpg'=>array(
'filepath'=> '/tmp/user'.date('YmdHis').'.jpg', // This could be whatever
)
)
);

Либо
Явно описать actionSaveJpg($filename).
И в нем явно создать экземпляр класса application.extensions.jpegcam.EJpegcam,
присвоить ему filename на переданное и вызывать его метод run


Есть еще и третий вариант.
Но не рекомендован

В этой части где формируется запрос прописать

$this->widget('application.extensions.jpegcam.EJpegcam', array(
'apiUrl' => 'index.php?r=user/jpegcam.saveJpg&filepath='.$this->filepath,

Соответственно в actions - перехватить значение $_GET['filepath'] -

public function actions()
{
if (isset($_GET['filepath'])) $fl=$_GET['filepath'];
else $fl="/путь/значение по умолчанию.jpg"

return array(
'jpegcam.'=> array(
'class'=>'application.extensions.jpegcam.EJpegcam',
'saveJpg'=>array(
'filepath'=> $fl,
)
)
);

Вопрос закрыт !
Ответить