Yii2 삭제 확인 대화 상자를 괄호로 설정합니다.

6484 단어 Yii
가까스로 처음부터 부트스트랩이었는데, 삭제 확인 등에 사용된 그 OS 표준 대화 상자인 JSconfirm()도 더 멋있고 싶었다.그래서 Bootbox는 그것을 다시 쓴다.
프레임에서 찾아낸yii.js에 이렇게 쓰여 있다.
/**
 * Displays a confirmation dialog.
 * The default implementation simply displays a js confirmation dialog.
 * You may override this by setting `yii.confirm`.
 * @param message the confirmation message.
 * @param ok a callback to be called when the user confirms the message
 * @param cancel a callback to be called when the user cancels the confirmation
 */
confirm: function (message, ok, cancel) {
    if (confirm(message)) {
        !ok || ok();
    } else {
        !cancel || cancel();
    }
},
아이구
You may override this by setting yii.confirm
대박이다.해봐.composer.json 중 추가bowerbootbox.아시다시피 Yii2에서 Compooser를 사용하면 Packagist부터 설치할 수 있을 뿐만 아니라 bower와 npm에서도 설치할 수 있습니다.
{
    "require": {
        "php": ">=5.4.0",
        ...略
        "bower-asset/bootbox": "~4.3.0"
    },
}
다른 프로젝트에서도 사용할 수 있도록 Bootbox용 자산 정의
<?php
namespace app\assets;

use Yii;
use yii\web\AssetBundle;

class BootboxAsset extends AssetBundle
{
    public $sourcePath = '@vendor/bower/bootbox';
    public $js = [
        'bootbox.js',
    ];
}
그거app\assets\AppAsset 추가를 항상 미리 넣었으면 해서요.
namespace app\assets;

use yii\web\AssetBundle;

class AppAsset extends AssetBundle
{
    // ... 略
    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
        'app\assets\BootboxAsset', // ここ
    ];
}
지금까지 기본적으로 모든 페이지가 있다bootbox.js.
드디어 표준 확인 대화상자를 덮어씁니다.예를 들면 이런 실복은 어때요?
class BootboxAsset extends AssetBundle
{
    // ... 略
    public static function overrideSystemConfirm()
    {
        Yii::$app->view->registerJs('
            yii.confirm = function(message, ok, cancel) {
                bootbox.confirm(message, function(result) {
                    if (result) { !ok || ok(); } else { !cancel || cancel(); }
                });
            }
        ');
    }
}
이처럼 JS를 등록할 수 있는 방법을 미리 만들어 views/layouts/main.php 근처 이곳에서부터 이렇게 만들었다.
<?php
// ... 略
AppAsset::register($this);
BootboxAsset::overrideSystemConfirm(); // これ (もしかしたら $this 渡したほうが...?)
?>
<!DOCTYPE html>

좋아!
yii.confirm를 자신의 함수로 바꿀 뿐이다.하지만 Yii의 자산 브로커를 이용하면 기분이 좋은 곳에서 투명해지기 때문에 아무 것도 신경 쓰지 않아도 된다.
아이고, 이게 가능할 때 제출 어디서 본 이름이야.

좋은 웹페이지 즐겨찾기