控制器中的自定义操作在 yii2 中不起作用
Custom action in controller not working in yii2
我有名为 RegisterController 的控制器和索引视图。如果我提交表单,它会显示 未找到页面 (404) 错误 。同样,如果我将方法更改为 actionCreate 而不是 actionAddBasic,工作正常。请帮我解决这个问题。谢谢
RegisterController.php
<?php
namespace app\controllers;
use app\models\Address;
use yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\filters\VerbFilter;
use app\models\BasicInfo;
use app\models\User;
/**
* Class RegisterController
* To Handle Registration Related Requests.
*/
class RegisterController extends Controller
{
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['addBasic'],
'rules' => [
[
'actions' => ['addBasic'],
'allow' => true,
'roles' => ['?'],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'addBasic' => ['post'],
],
],
];
}
/**
* To Load Registration Page.
*/
public function actionIndex()
{
$user = new User();
$basicInfo = new BasicInfo();
$basicInfo->gender = 1;
$fileUpload = new FileUpload();
$addressModel = new Address();
return $this->render('index', [
'userModel' => $user,
'basicInfoModel' => $basicInfo,
'fileUploadModel' => $fileUpload,
'addressModel' => $addressModel
]);
}
public function actionAddBasic()
{
yii::trace('Inside AddBasic');
return $this->render('index', [
'userModel' => new User(),
'basicInfoModel' => new BasicInfo(),
'fileUploadModel' => new FileUpload(),
'addressModel' => new Address()
]);
}
}
register/index.php:
<?php
use yii\helpers\Html;
use yii\helpers\ArrayHelper;
use yii\widgets\ActiveForm;
use app\models\MaritalStatus;
use app\models\ProfileFor;
?>
<div class="form">
<?php $form = ActiveForm::begin(['id' => 'form-signup-1', 'action' => ['index.php/register/addBasic']]); ?>
<div class="row">
<?= $form->field($basicInfoModel, 'name')->textInput(['maxlength' => 25, 'placeholder' => 'Name']) ?>
</div>
<div class="row">
<?= $form->field($userModel, 'email')->input('email', ['maxlength' => 30, 'placeholder' => 'Email']) ?>
</div>
<div class="row">
<?= $form->field($userModel, 'mno')->input('text', ['maxlength' => 10, 'placeholder' => 'Mobile Number']) ?>
</div>
<div class="row" style="float: right;">
<?= Html::submitButton('Create', ['class' => 'btn btn-success']) ?>
<?= Html::resetButton('Reset', ['class' => 'btn btn-success']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
在你的案例中我没有得到创建单独操作的好处,但错误在这里:
'action' => ['index.php/register/addBasic'],
addBasic
应替换为 add-basic
。
动作名称转换为破折号和小写字母。
另外在url中包含index.php
是多余的,这样就够了:
'action' => ['register/add-basic'],
对于同一个控制器甚至是这样:
'action' => ['add-basic'],
官方文档:
我有名为 RegisterController 的控制器和索引视图。如果我提交表单,它会显示 未找到页面 (404) 错误 。同样,如果我将方法更改为 actionCreate 而不是 actionAddBasic,工作正常。请帮我解决这个问题。谢谢
RegisterController.php
<?php
namespace app\controllers;
use app\models\Address;
use yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\filters\VerbFilter;
use app\models\BasicInfo;
use app\models\User;
/**
* Class RegisterController
* To Handle Registration Related Requests.
*/
class RegisterController extends Controller
{
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['addBasic'],
'rules' => [
[
'actions' => ['addBasic'],
'allow' => true,
'roles' => ['?'],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'addBasic' => ['post'],
],
],
];
}
/**
* To Load Registration Page.
*/
public function actionIndex()
{
$user = new User();
$basicInfo = new BasicInfo();
$basicInfo->gender = 1;
$fileUpload = new FileUpload();
$addressModel = new Address();
return $this->render('index', [
'userModel' => $user,
'basicInfoModel' => $basicInfo,
'fileUploadModel' => $fileUpload,
'addressModel' => $addressModel
]);
}
public function actionAddBasic()
{
yii::trace('Inside AddBasic');
return $this->render('index', [
'userModel' => new User(),
'basicInfoModel' => new BasicInfo(),
'fileUploadModel' => new FileUpload(),
'addressModel' => new Address()
]);
}
}
register/index.php:
<?php
use yii\helpers\Html;
use yii\helpers\ArrayHelper;
use yii\widgets\ActiveForm;
use app\models\MaritalStatus;
use app\models\ProfileFor;
?>
<div class="form">
<?php $form = ActiveForm::begin(['id' => 'form-signup-1', 'action' => ['index.php/register/addBasic']]); ?>
<div class="row">
<?= $form->field($basicInfoModel, 'name')->textInput(['maxlength' => 25, 'placeholder' => 'Name']) ?>
</div>
<div class="row">
<?= $form->field($userModel, 'email')->input('email', ['maxlength' => 30, 'placeholder' => 'Email']) ?>
</div>
<div class="row">
<?= $form->field($userModel, 'mno')->input('text', ['maxlength' => 10, 'placeholder' => 'Mobile Number']) ?>
</div>
<div class="row" style="float: right;">
<?= Html::submitButton('Create', ['class' => 'btn btn-success']) ?>
<?= Html::resetButton('Reset', ['class' => 'btn btn-success']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
在你的案例中我没有得到创建单独操作的好处,但错误在这里:
'action' => ['index.php/register/addBasic'],
addBasic
应替换为 add-basic
。
动作名称转换为破折号和小写字母。
另外在url中包含index.php
是多余的,这样就够了:
'action' => ['register/add-basic'],
对于同一个控制器甚至是这样:
'action' => ['add-basic'],
官方文档: