Yii2操作列调用没有网址/路由的控制器操作

时间:2018-02-15 10:15:02

标签: gridview yii2

作为网络开发的新手我面对几面墙要爬过去。有些我可以自己处理网络研究等等,其余的我不得不问像你这样经验丰富的开发人员。

我遇到了网格视图和操作列按钮以及更改数据库中的值并刷新局部视图的问题。我想制作一份“工作清单”,其中工作将在创建时启动(尚未实施),然后可以暂停,取消暂停和停止工作,并更新数据库中的日期时间。

我在互联网研究的帮助下解决了这个问题,但只有一个URL路由,它调用了动作并路由到它(例如index.php?r = site%2Fstart& id = 2)。但我希望它只刷新部分视图并更改数据库。

所以我认为我的问题是我通过路由调用动作的方式,但我没有找到另一种“工作”方式。我也尝试过使用javascript,但是我在移交值方面遇到了问题(因为我的javascript经验至少有2周的历史)。

所以我希望有人能以正确的方式正确地推动我解决这个问题。我不想要一个完整的解决方案,只需要一些提示和代码片段来让整个该死的东西按预期工作。也许我只是在网上搜索错误的关键字,为此我找不到解决方案。一切都会帮助我学习更多。

在我的局部视图的第一个代码片段中,我将从数据库的作业表中获取网格视图并更新状态(暂停或停止 - 运行将在逻辑上完成)。

<?php


use yii\grid\GridView;
use yii\widgets\Pjax;
use yii\helpers\Html;
use yii\helpers\ArrayHelper;
use yii\helpers\Url;


?>
    GRIDVIEW JOBSLIST


<p>
    <?= Html::a('Create new Job', ['/jobs/create'], ['class' => 'btn btn-success']) ?>
</p>

<?php Pjax::begin(); ?>    <?= GridView::widget([
    'dataProvider' => $dataProviderJobs,

    'columns' => [

        [
                'label' => 'User',
                'attribute' => 'parentid2.username',
                'format' => 'raw',
                'value' => function ($model) { 
            return Html::a($model->parentId2->username, ['/employees/view', 'id' => $model->parentId2->id]);
            },
        ],


        'job_description:ntext',
        'finished_flag',
        'jobs_paused',

        ['class' => 'yii\grid\ActionColumn',

        'template' => '{start}{pause}{stop}',
        'buttons' => [

                'start' => function ($url, $model) {
                    if($model->jobs_paused==1)
                        return Html::a('<span class="glyphicon glyphicon-play"></span>', $url, [
                                    'title' => Yii::t('app', 'Starten'),
                        ]);
                },

                'pause' => function ($url, $model) {
                    if($model->jobs_paused==0 && !$model->finished_flag==1)
                        return Html::a('<span class="glyphicon glyphicon-pause"></span>', $url, [
                                    'title' => Yii::t('app', 'Pausieren'),
                        ]);
                },

                'stop' => function ($url, $model) {
                    if($model->jobs_paused==0 && $model->finished_flag==0)
                        return Html::a('<span class="glyphicon glyphicon-stop"></span>', $url, [
                                    'title' => Yii::t('app', 'Abschließen'),
                        ]);
                },
      ],

      'urlCreator' => function ($action, $model) {
            if ($action === 'start') {
                $url =Url::toRoute(['site/start', 'id' => $model->id]);
                return $url;
        }
            if ($action === 'pause') {
                $url =Url::toRoute(['site/pause', 'id' => $model->id]);
                return $url;
        }
            if ($action === 'stop') {
                $url =Url::toRoute(['site/stop', 'id' => $model->id]);
                return $url;
        }
      }
     ],
            ],
    ]); ?>
<?php Pjax::end(); ?>

第二个我的控制器“site”,我的3个动作(开始,暂停和停止)将会/应该更新数据库值。

/**
 * Site controller
 */
class SiteController extends Controller
{


// Play, Pause, Stop of Joblist

public function actionStart($id)
{

    $jobstart = Jobs::findOne($id); 
    $jobstart->unpause_time = date("Y-m-d H:i:s",time()); 
    $jobstart->jobs_paused = 0; 
    $jobstart->save(false); echo "Neue Zeit gespeichert " . $jobstart->unpause_time; 

}

public function actionPause($id)
{

    $jobpause = Jobs::findOne($id);
    $jobpause->pause_time = date("Y-m-d H:i:s",time());
    $jobpause->jobs_paused = 1;
    $jobpause->save(false);

}

public function actionStop($id)
{

    $jobstop = Jobs::findOne($id); 
    $jobstop->end_time = date("Y-m-d H:i:s",time()); 
    $jobstop->finished_flag = 1; 
    $jobstop->save(false); 

}

}

最后,我展示了我的主视图,以便更好地理解容器。

 <?php
use yii\widgets\Pjax;


/* @var $this yii\web\View */

$this->title = 'Produktivumgebung';
?>

<div id="prodoutside" style="background-color:blue; position:relative; padding: 10px">

<div class="leftside">
<!--        // Container oben links für Übersicht und Suche-->
        <div id="upperleft" class="col-md-6 prodleft">

            <?php 
                echo $this->renderAjax('//site/frames/_customerssearch', ['model' => $searchModel]);?>

            <?php echo $this->renderAjax('//site/frames/_upperleft', array(
                'model' => $model,
                'dataProvider' => $dataProvider,
                'searchModel' => $searchModel)); ?>
        </div>

</div>


    <div class="rightside">
<!--        // Container oben rechts für Jobliste-->
        <div id="upperright" class="col-md-6 prodright">

            <?php echo $this->renderAjax('//site/frames/_upperright', array(
                'modelJobs' => $modelJobs,
                'dataProviderJobs' => $dataProviderJobs,
                'searchModelJobs' => $searchModelJobs)); ?>
        </div>


<!--        //Container unten links für Detailview-->
        <div id="lowerright" class="col-md-6 prodright">
            <?php Pjax::begin(); ?>
            <?php echo $this->renderAjax('//site/frames/_lowerright', array(
                'model2' => $model2)); ?>
            <?php Pjax::end(); ?>
        </div>

    </div>

0 个答案:

没有答案