lars-t / yii2-vuejs-frontend
Yii2 Vuejs前端直接替换,不再需要pjax
v1.0.4
2022-03-25 10:13 UTC
Requires
- bower-asset/axios: *
- bower-asset/vue: 2.6.14
- npm-asset/vee-validate: 2.0.9
- yiisoft/yii2: ~2.0.0
- yiisoft/yii2-composer: ^2.0
This package is auto-updated.
Last update: 2024-09-25 16:04:11 UTC
README
Yii2 Vuejs前端。不再需要pjax和更快的渲染。
安装
安装此扩展的首选方式是通过 composer。
运行
php composer.phar require --prefer-dist lars-t/yii2-vuejs-frontend "*"
或者在您的 composer.json
文件的require部分添加
"lars-t/yii2-vuejs-frontend": "*"
使用方法
扩展安装完成后,只需在代码中使用即可
扩展您的ActiveRecord类
class YourClass extends \larst\vuefrontend\VueActiveRecord
or for yii2-bootstrap
class YourClass extends \larst\vuefrontend\VueBootstrapActiveRecord
在您的表单周围插入Vue-widget
<?php
larst\vuefrontend\Vue::begin(['model'=>$model]);
.... form
larst\vuefrontend\Vue::end();
?>
在您的表单中设置fieldclass
'fieldClass' => 'larst\vuefrontend\VueActiveField'
or for yii2-bootstrap
'fieldClass' => 'larst\vuefrontend\VueBootstrapActiveField'
并让Vue知道使用表单内的submithandler
'options' => ['v-on:submit' => new yii\web\JsExpression("submitHandler")]
默认使用VeeValidate。要禁用VeeValidate,在字段的inputOptions中设置 'veeValidate' => false。在表单中设置 enableClientValidation 为 false,以禁用jQuery客户端验证。所有yii2-validators将自动转换为v-validate(此处还有一些工作要做)。
示例yii表单
$form = ActiveForm::begin([
'enableClientScript' => false,
'fieldClass' => 'larst\vuefrontend\VueBootstrapActiveField',
'options' => ['v-on:submit' => new yii\web\JsExpression("submitHandler")]
]);
在您的控制器中
if (Yii::$app->request->isVuejs) { // when you did not implement VueRequest use: if (Yii::$app->request->headers->get('X-VUEJS', false)) {
$response = Yii::$app->response;
$response->format = \yii\web\Response::FORMAT_JSON;
return [
'model' => $model->toVueArray(), // javascript object for model
'flashes' => Yii::$app->session->getAllFlashes(), // pass flashes to noty
'form' => ['action' => \yii\helpers\Url::to(['update', 'id' => $model->id])], // set form action
'history' => ['location' => \yii\helpers\Url::to(['update', 'id' => $model->id])] // use pushstate history
];
}
示例yii gridview
\larst\vuefrontend\Vue::begin([
'jsName' => 'nameVm',
'data' => [
'model' => $dataProvider->getVueModels(),
'gridReload' => 0,
'gridMethod' => 'get',
'gridUrl' => yii\helpers\Url::to(['someview/index']), // dynamic url for grid
'gridIndex' => yii\helpers\Url::to(['someview/index']), // default url for grid
'summary' => $dataProvider->renderSummary(),
],
'watch' => [
'gridReload' => new \yii\web\JsExpression('function(){this.gridHandler()}'),
],
]);
\larst\vuefrontend\VueGridView::widget([
'dataProvider' => $dataProvider,
'modelClass'=> \frontend\models\SomeModel::class,
在您的控制器中处理网格
if (Yii::$app->request->isVuejs) {
$response = Yii::$app->response;
$response->format = \yii\web\Response::FORMAT_JSON;
return [
'model' => $dataProvider->getVueModels(), // javascript object for model
'flashes' => Yii::$app->session->getAllFlashes(), // pass flashes to toastr
];
}