Лезвие, если условие в функции контроллера
Можно ли использовать условия blade @if в функциях контроллера. Это моя функция PublicController
public function tourBanner($country){
@if( $country == 'country1')
background-image:url({{ asset('images/inside8.jpg') }});
@elseif ( $country == 'country2')
background-image:url({{ asset('images/inside7.jpg') }});
@elseif ( $country == 'country3')
background-image:url({{ asset('images/inside5.jpg') }});
@elseif ( $country == 'country4')
background-image:url({{ asset('images/inside6.jpg') }});
@else
background-image:url({{ asset('images/inside10.jpg') }});
@endif
return banner;
}
И я получаю эту ошибку
Parse error: syntax error, unexpected 'if' (T_IF)
Какую ошибку я допустил или мы не можем использовать blade-сервер if if в контроллере?
7 ответов
Синтаксис клинка @if
сделано для использования в представлениях лезвия не в файлы php (как в вашем случае контроллеры). Вы должны использовать Blade Syntax в файлах, заканчивающихся расширением - filename.blade.php, и в вашем контроллере, пожалуйста, используйте обычный синтаксис PHP для оператора if.
Пожалуйста, смотрите Blade Docs
class Controller {
function a() {
if($country == 'country1') {
$asset_str = asset('images/inside8.jpg');
$banner = "background-image:url({$asset_str})";
}
....
return $banner;
}
}
Надеюсь это поможет!
Опечатки в вашем коде, этот код предназначен для блейд-файлов, а не для ваших файлов PHP. Перечисление проблем в вашем коде
Удалить @
из вашего кода
@if .... @elsif
должно быть
if .... elseif
лучше для нескольких if ... else
ты можешь использовать switch case
Вы возвращались banner
но это должно быть $banner
а также вы не назначали никакого значения $banner
переменная. Так что ваш код будет как
if( $country == 'country1')
$banner = "background-image:url(".asset('images/inside8.jpg') .")";
.......
return $banner;
лучше использовать switch case
как
switch($country)
{
case "country1":
$banner = "background-image:url(".asset('images/inside8.jpg') .")";
break;
case ..............
}
Вы можете создать стиль в вашем контроллере, а затем передать полученные данные вашему представлению из этого контроллера и затем отобразить его. Этот фрагмент может дать вам немного понимания:
<?php
public function tourBanner($country){
$extraData = ['zero', 'one', 'two'];
switch($country){
case 'country1':
$bgImage = 'images/inside8.jpg';
break;
case 'country2':
$bgImage = 'images/inside7.jpg';
break;
case 'country3':
$bgImage = 'images/inside5.jpg';
break;
case 'country4':
$bgImage = 'images/inside6.jpg';
break;
default:
$bgImage = 'images/inside10.jpg';
break;
}
return view("your.blade.view", array(
"bgImage" => $bgImage,
'extraData' => $extraData,
));
}
Затем; во View это было бы вопросом выполнения чего-то подобного:
<div class="container" style="background-image:url({{ asset($bgImage) }})">
<div class="col-md-12">
Some Content...
</div>
</div>
В контроллере вы должны написать так:
if ($country == 'country1') {
$a = 'background-image:url('.asset('images/inside8.jpg').')';
} elseif ....
Но если вы собираетесь создавать HTML/CSS/JS с PHP, это ужасная идея, не делайте этого.
Blade - это анализатор шаблонов, который за кулисами преобразует код в PHP. Если вы хотите использовать оператор if в вашем контроллере, вы просто используете стандартный оператор IF.
if($q == $a) {
#more code here
} else {
$other code here
}
Как предложено выше, рекомендуется использовать оператор switch при использовании множества операторов else для вашего if
switch($q){
case "yes":
return $something;
break;
case "no":
return $somethingelse;
break;
case "maybe":
return $whoknows;
break;
}
Пожалуйста, попробуйте переключить чехол для вышеуказанного условия.
switch ($country) {
case "country1":
echo "background-image:url({{ asset('images/inside8.jpg') }})";
break;
}
Он вернет точно такие же результаты.
НЕТ, ты не можешь. просто используйте по умолчанию if else
состояние в php.