使用 PHP Yii2 框架創建表單

2024年2月6日 18点热度 0人点赞

向AI提問題: 使用 php Yii2 框架創建表單,要求表單帶上傳功能;請提供控制器、模型、視圖的代碼,如果需要使用第三方js前端UI框架,請告訴我該如何引用它。

在Yii2框架中創建帶有上傳功能的表單需要使用Yii2內置的`ActiveForm`類,同時還需要在模型中定義相應的規則和在控制器中處理文件上傳。下面是一個簡單的例子,假設你想要創建一個包含文件上傳功能的表單。

1. 創建模型(models/YourModel.php):

<?php

namespace app\models;

use yii\base\Model;

use yii\web\UploadedFile;

class YourModel extends Model

{

public $file; // 屬性用於接收上傳的文件

public function rules()

{

return [

[['file'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg, jpeg'],

];

}

}

2. 創建控制器(
controllers/YourController.php):

<?php

namespace app\controllers;

use Yii;

use yii\web\Controller;

use app\models\YourModel;

use yii\web\UploadedFile;

class YourController extends Controller

{

public function actionYourForm()

{

$model = new YourModel();

if (Yii::$app->request->isPost) {

$model->file = UploadedFile::getInstance($model, 'file');

if ($model->file && $model->validate()) {

$uploadPath = Yii::getAlias('@apphttps://news.xinpengboligang.com/uploads/');

$model->file->saveAs($uploadPath . $model->file->baseName . '.' . $model->file->extension);

// 處理文件上傳後的邏輯,可以保存文件路徑到數據庫或其他操作

// 例如:$model->file_path = $uploadPath . $model->file->baseName . '.' . $model->file->extension;

}

}

return $this->render('yourForm', ['model' => $model]);

}

}

3. 創建視圖文件(
views/your-controller/yourForm.php):

<?php

use yii\helpers\Html;

use yii\widgets\ActiveForm;

?>

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>

<?= $form->field($model, 'file')->fileInput() ?>

<div class="form-group">

<?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>

</div>

<?php ActiveForm::end(); ?>

在這個例子中,`models/YourModel.php` 中定義了一個模型,其中包含一個用於接收上傳文件的屬性,並使用`rules`方法設置了文件上傳的規則。`
controllers/YourController.php` 中的`actionYourForm`方法處理了文件上傳的邏輯,將上傳的文件保存到指定目錄。視圖文件`
views/your-controller/yourForm.php` 使用`ActiveForm`創建了帶有文件上傳功能的表單。

效果如下:

如果你希望使用第三方的js前端UI框架,可以在佈局文件中引入相應的CSS和JS文件,例如,如果你想使用Bootstrap,可以在佈局文件中添加以下代碼:

<?php

use yii\helpers\Html;

use yii\bootstrap\NavBar;

use yii\bootstrap\Nav;

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

/* @var $content string */

\yii\bootstrap\BootstrapAsset::register($this);

$this->beginPage();

?>

<!DOCTYPE html>

<html lang="<?= Yii::$app->language ?>">

<head>

<meta charset="<?= Yii::$app->charset ?>">

<meta name="viewport" content="width=device-width, initial-scale=1">

<?= Html::csrfMetaTags() ?>

<title><?= Html::encode($this->title) ?></title>

<?php $this->head() ?>

</head>

<body>

<?php $this->beginBody(); ?>

<div class="wrap">

<?php

NavBar::begin([

'brandLabel' => 'My Yii Application',

'brandUrl' => Yii::$app->homeUrl,

'options' => [

'class' => 'navbar-inverse navbar-fixed-top',

],

]);

echo Nav::widget([

'options' => ['class' => 'navbar-nav navbar-right'],

'items' => [

['label' => 'Home', 'url' => ['/site/index']],

// other menu items...

],

]);

NavBar::end();

?>

<div class="container">

<?= $content ?>

</div>

</div>

<?php $this->endBody(); ?>

</body>

</html>

<?php $this->endPage(); ?>

在這個例子中,我使用了Yii2的Bootstrap擴展,通過`\yii\bootstrap\BootstrapAsset::register($this);`來引入Bootstrap的CSS和JS文件。你可以根據自己的需要引入其他第三方前端UI框架的文件。