deesoft/yii2-inertia

Yii2 inertia js

Installs: 1

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 0

Open Issues: 0

Type:yii2-extension

dev-master / 1.0.x-dev 2025-02-24 11:59 UTC

This package is auto-updated.

Last update: 2025-02-24 13:42:42 UTC


README

This is the Yii 2 server-side adapter for Inertia.

With Inertia you are able to build single-page apps using classic server-side routing and controllers, without building an API.

See client-side setup for client instalation.

Installation

The preferred way to install this extension is through composer.

Either run

php composer.phar require --prefer-dist deesoft/yii2-inertia "*"

or add

"deesoft/yii2-inertia": "*"

to the require section of your composer.json file.

Usage

Once the extension is installed, simply use it in your controller :

    public function actionIndex()
    {
        $query = User::find();
        $request = Yii::$app->getRequest();
        $query->andFilterWhere([
            'id' => $request->get('id'),
            'active' => $request->get('active'),
        ]);

        $query->andFilterWhere(['ilike', 'username', $request->get('username')])
            ->andFilterWhere(['ilike', 'email', $request->get('email')])
            ->andFilterWhere(['ilike', 'phone', $request->get('phone')]);

        if ($q = $request->get('q')) {
            $query->andWhere([
                'OR',
                ['ilike', 'username', $q],
                ['ilike', 'email', $q],
                ['ilike', 'phone', $q],
            ]);
        }

        $sortAttrs = [
            'id',
            'username',
            'email',
            'phone',
        ];
        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'sort' => [
                'attributes' => $sortAttrs,
            ]
        ]);
        return Inertia::render('user/index', [
                'data' => $dataProvider
        ]);
    }

    public function actionCreate()
    {
        $model = new User();

        if ($this->request->isPost) {
            if ($model->load($this->request->post(), '') && $model->save()) {
                return $this->redirect(['view', 'id' => $model->id]);
            }
        }

        return Inertia::render('user/create', [
            'model' => $model,
        ]);        
    }

Configuration

Add configuration to Application $params config.

    'components' => [
        ...
    ],
    'params' => [
        'inertia' => [
            'tag' => 'div', // default div
            'id' => 'app', // default app
            'viewFile' => '@app/views/app.php', // default @dee/inertia/views/app.php
            'serializer' => ['class' => dee\inertia\Serializer::class], //default
            'encript_history' => true, // default false
            'vite_entry_file' => 'client/app.js', // default
            'app_title' => 'My App', // default My Application
        ],
        'inertia.shared' => [
            'user' => function(){
                if(!Yii::$app->user->isGuest){
                    return ['id' => Yii::$app->user->id];
                }
            }
        ],
    ],