...
use yii\base\ViewNotFoundException;
...
$get = Yii::$app->request->get();
$path = Yii::getAlias('@web').'/views/mydir/'.$get['url'];
...
try {
// 1) тут пишите то что хотите проверить
$this->render($path, ['model' => $model,]);
} catch (ViewNotFoundException $e) {
// 2) тут выводите "удобную" ошибку, чтобы не закрывать ошибкой 500 или той которая вылезает
$this->render('default', [ 'model' => $model,]);
}
...
Yii::getAlias('@frontend')
- а вдруг проект лежит не в папке frontend
???return $view;
Либо вы получите представление, либо default...
use yii\base\ViewNotFoundException;
...
try {
// 1) тут пишите то что хотите проверить
} catch (ViewNotFoundException $e) {
// 2) тут выводите "удобную" ошибку, чтобы не закрывать ошибкой 500 или той которая вылезает
}
ПРИМЕР:
перехожу по /site/index/c/1/b/2
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'' => 'site/index', // сделает главную страницу сайтконтроллера чистой без слэшей и экшенов
'site/index/<c:\d+>/<b:\d+>' => 'site/index', // если верхнее правило оставить можно вот так обработать http://example.ru/1/2 - d+ - digital - обрабатывает только цифры
...
],
РЕЗУЛЬТАТ:
мы в экшене index контроллера site, получаю массив GET [c=>1,b=>2]
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'' => 'site/index',
'site/index/<param:\w+>/<c:\d+>/<params:\w+>/<b:\d+>' => 'site/index',
'site/index/<param:\w+>/<c:\d+>/<params:\w+>/<b:\d+>.html' => 'site/index', // с преффиксом .html
// analog -> http://example.ru/site/index?param=c&c=1¶ms=b&b=2
// analog -> http://example.ru/site/index/c/1/b/2
// preffix -> http://example.ru/site/index/c/1/b/2.html
...
],
\common\config\main-local.php
...
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=****',
'username' => '****',
'password' => '****',
'charset' => 'utf8',
'enableSchemaCache' => false, // Вместо `true` поставить `false` и обновить через Ctrl+F5 или Cmd + R (Mac OS)
'schemaCacheDuration' => 3600,
'schemaCache' => 'cache',
],
...
window.onload = function() {
document.addEventListener("contextmenu", function(e){
e.preventDefault();
}, false);
document.addEventListener("keydown", function(e) {
if (e.ctrlKey && e.shiftKey && e.keyCode == 73) {
disabledEvent(e);
}
if (e.ctrlKey && e.shiftKey && e.keyCode == 74) {
disabledEvent(e);
}
if (e.keyCode == 83 && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) {
disabledEvent(e);
}
if (e.ctrlKey && e.keyCode == 85) {
disabledEvent(e);
}
if (event.keyCode == 123) {
disabledEvent(e);
}
}, false);
function disabledEvent(e){
if (e.stopPropagation){
e.stopPropagation();
} else if (window.event){
window.event.cancelBubble = true;
}
e.preventDefault();
return false;
}
};
// for Yii2
public function rules()
{
return [
...
['sender', 'validateSender'],
...
];
}
// for Yii2
public function validateSender($attribute, $params)
{
$money = self::rightAdress($this->sender);
if ($money == 0) {
$this->addError($attribute, 'Неправильный адрес Ethereum-кошелька.');
}
}
public function rightAdress($sender = '')
{
$json = self::viewUrlContent($sender);
$obj = json_decode($json);
return ($obj->result == 'Invalid Address format') ? '0' : '1'; // Invalid Address format
}
public static function formUrlAddressETH($sender = '')
{
// Tokensell::formUrlAddressETH()
return self::APIurl.'?module=contract&action=getabi&address='.$sender.'&apikey='.self::YourApiKeyToken;
}
public static function viewUrlContent($sender = '')
{
return file_get_contents(self::formUrlAddressETH($sender));
}
const APIurl = 'https://api-rinkeby.etherscan.io/api';
const YourApiKeyToken = 'тут ваш ключ от которого никакого толка ))) ';
Предупреждаю, что валидация срабатывает после отправки формы, после перезагрузки страницы, так что советую добавить ajax
Yii::app()->controller->id
- значит сможем определить откуда берётся вьюшка, потому как у бекенда и фронтенда контроллеры разные.$('p').on('click', function () {
$(this).attr('data-before','bar');
});
p:before {
content: attr(data-before);
color: red;
cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p>This is a paragraph.</p>
<p>This is another paragraph.</p>
<?= __FILE__; // абсолютный путь ?>
<?=$this->context->module->id; // какой модуль используется ?>
<?=Yii::$app->controller->action->id; // имя экшена ?>
<?=Html::a('Главная', Url::toRoute('/web/page/index'));?>
$('#slider').slider({
formatter: function(value) {
var x = value;
var d = 0.015;
var m = x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); // при форматировании числа с запятой 1,000,000
var one = x * Number(d); // умножение с нецелыми числами
$('#text').html(x + ' $');
$('#return').html(one.toFixed().replace(/\B(?=(\d{3})+(?!\d))/g, ",")); // если надо округлить не целое число 4.554849 и вставить запятые как в m
return z;
}
});
<div id="text"></div>
<div id="return"></div>
$("a.youe_class").click(function() {
...
});
$("a").click(function() {
...
});
<p><a href="#top">К началу страницы</a></p>
<section id="top">
...
</section>
$(document).ready(function() {
var margin = 100; // переменная для контроля докрутки
$("a").click(function() { // тут пишите условия, для всех ссылок или для конкретных
$("html, body").animate({
scrollTop: $($(this).attr("href")).offset().top+margin+ "px" // .top+margin - ставьте минус, если хотите увеличить отступ
}, {
duration: 1600, // тут можно контролировать скорость
easing: "swing"
});
return false;
});
});
...
<?php
$page->text = 'я принимаю пользовательское соглашение';
?>
...
<?=$form->field($model, 'serv1')->checkbox(['uncheck' => $page->text, 'value' => $page->text, 'label' => '$page->text]); ?>
<?=$form->field($model, 'serv1')->checkbox(['checked'=>false])?>
<script>
$( 'button' ).click(function() {
if ( $( "#box" ).is( ":hidden" ) ) {
$( "#box" ).show( "slow" );
} else {
$( "#box" ).slideUp();
}
});
</script>
<button>показать ещё</button>
<div id="box">тут картинки</div>
else ...
$( "#box" ).load( "ajax/image.html #target" );
...
<div id="box">
<div id="target"></div>
</div>