我正在阅读Laravel Blade 文档,我不知道如何在模板中分配变量以供以后使用。我不能做{{ $old_section = "whatever" }},因为它会回显“whatever”,而我不想这样做。
{{ $old_section = "whatever" }}
我知道我可以做,但这并不优雅。
在Blade模板中是否有更好、更优雅的方式来做到这一点?
我不认为你可以——但是,这种逻辑可能应该在你的控制器中处理,并传递到已经设置好的视图中。
<?php /** * <code> * {? $old_section = "whatever" ?} * </code> */ Blade::extend(function($value) { return preg_replace('/\{\?(.+)\?\}/', '<?php ${1} ?>', $value); });
永远不会只有一种方法。
\{\{ $x = 1 ? '' : '' }}
你可以在视图文件中设置一个变量,但是它会在你设置的时候被打印出来。不管怎样,有一个变通办法。您可以在未使用的部分中设置该变量。例子:
@section('someSection') \{\{ $yourVar = 'Your value' }} @endsection
然后\{\{ $yourVar }}将打印Your value到你想要它的任何地方,但是当你保存变量时你不会得到输出。
\{\{ $yourVar }}
Your value
编辑:必须为section命名,否则将引发异常。
有一个简单的解决方法,不需要更改任何代码,它在Laravel 4中也同样有效。
你只需要在传递给@if语句的表达式中使用赋值操作符(=),而不是(例如)使用==这样的操作符。
@if
=
==
@if ($variable = 'any data, be it string, variable or OOP') @endif
然后你可以在任何地方使用它你可以使用任何其他变量
\{\{ $variable }}
唯一的缺点是你的任务将看像一个错误,有人没有意识到你这样做是一个变通办法。
在laravel-4中,你可以使用模板注释语法来定义/设置变量。
注释语法是\{\{-- anything here is comment --}},它由叶片引擎呈现为
\{\{-- anything here is comment --}}
<?php /* anything here is comment */ ?>
比如,我们可以用它来定义变量
\{\{-- */$i=0;/* --}}
将由叶片as呈现 <?php /* */$i=0;/* */ ?>为我们设置变量。
<?php /* */$i=0;/* */ ?>
在我看来,最好将逻辑保存在控制器中,并将其传递给视图使用。这可以通过使用'View::make'方法来实现。我目前正在使用Laravel 3,但我非常确定它在Laravel 4中是相同的方式。
public function action_hello($userName) { return View::make('hello')->with('name', $userName); }
或
public function action_hello($first, $last) { $data = array( 'forename' => $first, 'surname' => $last ); return View::make('hello', $data); }
'with'方法是可链的。然后你可以像这样使用上面的语句:
<p>Hello \{\{$name}}</p>
更多信息请点击这里:
http://three.laravel.com/docs/views
http://codehappy.daylerees.com/using-controllers
在Laravel 4中:
如果你想让变量在所有视图中都可访问,而不仅仅是模板,View::share是一个很好的方法(更多信息在这个博客上)。
View::share
只需在app / controllers / BaseController.php中添加以下内容
class BaseController extends Controller { public function __construct() { // Share a var with all views View::share('myvar', 'some value'); } }
现在$myvar将对你的所有视图可用——包括你的模板。
$myvar
我用它来为我的图像设置特定于环境的资产url。
我有一个类似的问题,并找到了我认为是正确的解决方案与视图的作曲家
视图编辑器允许你在每次调用某个视图时设置变量,这些变量可以是特定的视图,也可以是整个视图模板。不管怎样,我知道这不是对这个问题的直接回答(而且晚了2年),但它似乎是一个比在一个视图中使用blade设置变量更优雅的解决方案。
View::composer(array('AdminViewPath', 'LoginView/subview'), function($view) { $view->with(array('bodyClass' => 'admin')); });
Laravel 5.5及以上版本
使用blade指令的完整形式:
@php $i = 1 @endphp
Laravel 5.2 - 5.4
你可以使用内联标签:
@php ($i = 1)
或者你可以在block语句中使用它:
添加一个' define '标签
如果你想使用自定义标签并使用@define而不是@php,可以像这样扩展Blade:
/* |-------------------------------------------------------------------------- | Extend blade so we can define a variable | <code> | @define $variable = "whatever" | </code> |-------------------------------------------------------------------------- */ \Blade::extend(function($value) { return preg_replace('/\@define(.+)/', '<?php ${1}; ?>', $value); });
然后做以下其中一项:
快速解决方案:如果您很懒,可以将代码放在AppServiceProvider.php的boot()函数中。
LARAVEL 4
你可以把上面的代码放在应用程序/开始/ global.php的底部(或者任何你觉得更好的地方)。
完成以上修改后,您可以使用:
@define $i = 1
定义一个变量。
至于我优雅的方式是这样的
\{\{ ''; $old_section = "whatever"; }}
然后回显你的$old_section变量。
$old_section
\{\{ $old_section }}
入侵评论并不是一种非常可读的方式。此外,编辑器会将其着色为注释,有人在查看代码时可能会错过它。
试试这样做:
\{\{ ''; $hello = 'world' }}
它将编译成:
<?php echo ''; $hello = 'world'; ?>
...完成作业,不要重复任何东西。
你会把事情搞得太复杂了。
使用纯php
<?php $i = 1; ?> \{\{$i}}
donesies。
(或者https://github.com/alexdover/blade-set看起来也很简单)
我们都是通过在视图中设置变量来“入侵”系统,所以为什么要让“入侵”变得更复杂呢?
在Laravel 4中测试。
另一个好处是语法高亮显示工作正常(我以前使用注释黑客,它是可怕的阅读)
最好练习在Controller中定义变量,然后使用compact()或->with()方法传递给视图。
compact()
->with()
否则,#TLGreg给出了最好的答案。
Blade ·拉迪奇/ blade-extensions有一个非常好的扩展。添加后,可以使用@set(variable_name, variable_value)
@set(var, 33) \{\{$var}}
Laravel 5你可以很容易做到这一点。见下文
\{\{--*/ @$variable_name = 'value' /*--}}
在Laravel 5.1, 5.2:
https://laravel.com/docs/5.2/views#sharing-data-with-all-views
你可能需要与你的应用程序呈现的所有视图共享一段数据。你可以使用视图工厂的share方法。通常,您应该在服务提供者的引导方法中放置共享调用。您可以自由地将它们添加到AppServiceProvider或生成一个单独的服务提供者来容纳它们。
编辑文件:/app/Providers/AppServiceProvider.php
/app/Providers/AppServiceProvider.php
<?php namespace App\Providers; class AppServiceProvider extends ServiceProvider { public function boot() { view()->share('key', 'value'); } public function register() { // ... } }
我正在寻找一种方法将值赋给一个键,并在我的视图中多次使用它。在这种情况下,你可以首先使用@section{"key", "value"},然后调用@yield{"key"}将值输出到视图或其子视图的其他位置。
@section{"key", "value"}
@yield{"key"}
我将扩展@Pim给出的答案。
将此添加到AppServiceProvider的引导方法中
<?php /* |-------------------------------------------------------------------------- | Extend blade so we can define a variable | <code> | @set(name, value) | </code> |-------------------------------------------------------------------------- */ Blade::directive('set', function($expression) { list($name, $val) = explode(',', $expression); return "<?php {$name} = {$val}; ?>"; });
这样就不会暴露编写任何php表达式的能力。
你可以像这样使用这个指令:
@set($var, 10) @set($var2, 'some string')
__abc0 PHP 7.0:
最简单有效的方法是赋值内括号。
规则很简单:使用变量是否超过一次?然后在括号内声明它第一次使用,保持冷静,继续下去。
@if(($users = User::all())->count()) @foreach($users as $user) \{\{ $user->name }} @endforeach @else There are no users. @endif
是的,我知道@forelse,这只是一个演示。
@forelse
由于变量现在被声明为和当它们被使用时,不需要任何刀片工作区。
自Laravel 5.2.23以来,你有了@php Blade指令,你可以使用内联或作为块语句:
@php($old_section = "whatever")
@php $old_section = "whatever" @endphp
适用于所有版本的刀锋。
\{\{--*/ $optionsArray = ['A', 'B', 'C', 'D','E','F','G','H','J','K'] /*--}}
你可以使用我发布的包:https://github.com/sineld/bladeset
然后你可以轻松地设置你的变量:
@set('myVariable', $existing_variable) // or @set("myVariable", "Hello, World!")
分配变量刀片模板,这里是解决方案
我们可以在blade page中使用<?php ?>标记
<?php ?>
<?php $var = 'test'; ?> \{\{ $var }
我们可以用特殊的语法使用刀片注释
\{\{--*/ $var = 'test' /*--}} \{\{ $var }}
刀片模板引擎中变量可以通过以下方式设置: . b 1. 通用PHP块 < br > 环境变量: <?php $hello = "Hello World!"; ?> < br > 输出: \{\{$hello}} < br > < br > 2. Blade PHP块 < br > 环境变量: @php $hello = "Hello World!"; @endphp < br > 输出:< / >强\{\{$hello}} < br >
<?php $hello = "Hello World!"; ?>
\{\{$hello}}
@php $hello = "Hello World!"; @endphp
您可以使用如下所示的extend方法来扩展刀片。
Blade::extend(function($value) { return preg_replace('/\@var(.+)/', '<?php ${1}; ?>', $value); });
在此之后,按如下方式初始化变量。
@var $var = "var"
在laravel文档中https://laravel.com/docs/5.8/blade#php 你可以这样做:
@php $my_variable = 123; @endphp
在刀片文件中,可以使用这种格式
@php $i++ @endphp
同样的问题也困扰着我。但我能够通过使用以下代码段来管理这个问题。在你的刀片模板中使用这个。
<input type="hidden" value="\{\{$old_section = "whatever" }}"> \{\{$old_section }}
Laravel 7:
\{\{ $solution = "Laravel 7 is awesome and easy to use !!" }}
在laravel8
@php $name="Abdul mateen"; \{\{ echo $name; }} @endphp