2016-04-21 16 views
1

Ich habe eine einfache Frage vielleicht ein Idiot, aber ist es möglich, eine Aktion in einem anderen zu haben? Ich habe einen 'Administration' Controller und einen 'actionUser'. Mit dieser Aktion kann ein Administrator die Benutzer der App verwalten. Alle Benutzer werden mit einer Gridview angezeigt, und in der 'ActionColumn' besteht die Möglichkeit, den Benutzer anzuzeigen und zu bearbeiten.Yii 2 url Aktion

Meine Frage ist: Ist es möglich, die actionView im actionUser zu verwalten.

Danke!

--- EDIT ---

Ich habe actionUsers, die den Datenprovider für das Gridview und Paginierung mangage. Diese Aktion (vorerst) erhält keine Parameter. Ich möchte die Ansicht und die Bearbeitung des Benutzers in dieser Aktion verwalten. Um diese Aktion nennen Ich muss die URL erhalten administration/users und wenn ich auf die Schaltfläche klicken, um einen Benutzer zu sehen Ich habe administration/users/view?id=1

Ich dachte Parameter zu meiner Aktion hinzufügen

public function actionUsers($action, $id) 

zu haben, aber wenn ich will um alle Benutzer anzuzeigen, schlägt es fehl. Dann ist etwas komisches die? Id = 1, weil Ansicht nicht als Parameter, sondern als Aktion in den Controller-Benutzern betrachtet wird (denke ich). Der einzige Parameter ist ID für jetzt.

Ich brauche wirklich Hilfe bitte

+0

Vielleicht ist es besser zu nutzen Modul/controller/action neu anordnen? Modulverwaltung mit einigen Controllern (in Ihrem Fall UserController). Und UserController kann einfache 'actionView()' und 'actionIndex()' Methoden haben. Weil die Aktion mit $ action-Parameter das Standard-Controller-Verhalten unterbricht. – Andrew

+0

Ja, ich dachte mir das zu tun, aber ich wollte wissen ob es möglich ist :) –

Antwort

1

Ein Weg ist die Basis auf actionColumn, in Sie gridview actionColumn Sie Ihre actionButton auf diese Weise anpassen können

<?= GridView::widget([ 
    'dataProvider' => $dataProvider, 
    'filterModel' => $searchModel, 
    'columns' => [ 
     ['class' => 'yii\grid\SerialColumn'], 
     'yuor_field1', 
     ....... 
     ....... 
     ['class' => 'yii\grid\ActionColumn', 
      'contentOptions' => ['style' => 'width:34px; font-size:22px;'], 
      'template' => '{view}',    
      'buttons' => [ 
       'view' => function ($url, $model) { 
        return Html::a('<span class="glyphicon glyphicon-pencil"></span>', $url, [ 
        'title' => 'view user', 
        ]); 
       } 
      ], 
      'urlCreator' => function ($action, $model, $key, $index) { 
       if ($action === 'view') { 
        $url = Url::to(['/administration/user/view', 'id' =>$model->id]); 
       return $url; 
       } 
      } 
     ] 

für den Aufruf des actionUser wie Sie haben (mit zwei Parameter)

public function actionUsers($action, $id) 

sollten Sie beide $ action ein $ id in dir passieren url auf diese Weise

if ($action === 'view') { 
    $url = Url::to(['/administration/user/view', action'=> 'your_action', 'id' =>$model->id]); 
.... 

oder sollten Sie den Code für das Aufspalten der Aktion erforderlich in mehr Controller/Action-Funktion .. in Ihrem Controller

+0

Danke, das habe ich gemacht, aber stelle dir meine URL vor: administration/user/view? Id = 1 wie kann ich die Ansichtsaktion in der Benutzeraktion? –

+0

Ich habe die Antwort aktualisieren – scaisEdge

+0

In der Tat ist die Sicht nicht das Problem, ich verstehe, wie es funktioniert, aber es ist in der Steuerung, die ich nicht verstehe. Muss ich in Betracht ziehen, dass "Ansicht" ein Parameter ist und Bedingungen in dem actionUser machen? –