Всем добрый день.
Подскажите пожалуйста, каким образом возможно используя расширение 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>
jpegcam переопределить actions, файл записи с фотографией
Re: jpegcam переопределить actions, файл записи с фотографией
Решение следующее, как всегда на этапе обучения проясняется логика работы 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,
)
)
);
Вопрос закрыт !
Сохранять контекст между запросами - нужно пользоваться механизмом сессий
или передавать все переменные контекста явно в запросе.
Т. е.
Либо явно в 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,
)
)
);
Вопрос закрыт !