当前位置: 首页 > 知识库问答 >
问题:

如何在Laravel刀片模板中编写PHP代码?

汤英豪
2023-03-14

我正在为一个在Laravel中完成的站点编写代码,我知道不建议在Blade模板中编写PHP代码,但在这个例子中,我的可用时间有限。

@php
   if($_POST["submit"]){
        $name = $_POST["name"];
        $email = $_POST["email"];

        $missingName = "<p><strong>Please eneter your name.</strong></p>";
        $invalidEmail = "<p><strong>Invalid Email.</strong></p>";


        if($name){
            $name = filter_var($name, FILTER_SANITIZE_STRING);
        }else{

            $errors .= $missingName;
        }


          $email = filter_var($email, FILTER_SANITIZE_EMAIL);
          $email = filter_var($email, FILTER_VALIDATE_EMAIL);
         if(filter_var($email, FILTER_VALIDATE_EMAIL)){

          }else{
              $errors .= $invalidEmail;
          }
        if($errors){
            $resultMessage = '<div  class="alert alert-danger">' . $errors .'</div>';
        }else{

            $to = "leads@relevant.systems";
            $subject = "DijiJock update request form.";
            $message = "<html>
                         <body>
                         <h2 style='color:black'>DijiJock update request form.</h2>
                <p style='color:green'>Name: $name</p>
                <p style='color:green'>Email: $email</p>
                <p style='color:black'>$name has requested DijiJock updates, please forward all updates to $email.</p>
                         </body>
                       </html>";
            $headers = "Content-type: text/html";


            if(mail($to, $subject, $message, $headers)){
                $resultMessage = '<div  class="alert alert-success">Thank you for the meesage!</div>';

            }else{
                $resultMessage = '<div  class="alert alert-warning">Email not sent! Please try again later.</div>';
            }
        }
        echo $resultMessage;
    }             
@endphp

中间的PHP代码不起作用?

共有2个答案

齐兴运
2023-03-14

使用控制器和刀片视图方法。

Mail::send('emails.YOUR_BLADE_FILE', ['user' => $user, 'request' => $request], function ($message) use ($user, $request) {
     $message->to('EMAIL_ACCOUNT', 'EMAIL_USER_NAME');         
     $message->subject('EMAIL SUBJECT');
});

尝试使用此功能。这很容易,非常干净。

沈乐邦
2023-03-14

(在这里,更好地在控制器中实现操作,您可以创建一个helper类,通过服务提供者绑定它,然后使用它)

在某些情况下,将PHP代码嵌入视图是很有用的。您可以使用Blade@php指令在模板中执行一块普通php:

@php
    //
@endphp

这是完全相同的:

<?php

?>

如果您需要共享全局变量,最好的方法是使用视图facade的方法share(),并在服务提供者上这样做。https://laravel.com/docs/5.7/views#passing-数据到视图

exof用例:布局的嵌套结构=

namespace App\Providers;

use Illuminate\Support\Facades\View;

class ViewGlobaleVarServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    { // \/\/\/\/\/\/\/\/  <====== !
        View::share('sysAdmDashPgContainerHeader', 'system.admin.dashboard.partials.pageContainer.partials._header');
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

在这里,我创建了一个新的服务提供者,您可以使用现有的服务提供者,比如AppServiceProvider。

如果要执行的操作取决于控制器调用,那么最好在控制器上实现,如果是视图特定的(内部逻辑)。那么@php@endphp就是实现这一点的好方法。

同样,为了共享变量,我们可以简单地在布局视图中使用@php@phpend(它将在所有包含的部分和扩展它的对象上可用)。所以你知道“包含”和“收益”的本质,在这个问题上延伸。然而,这不是最佳实践或建议。建议使用上面的helper View::share()。

编写代码的另一种方法是创建自己的指令:

  • 检查文档:https://laravel.com/docs/5.7/blade#extending-刀片
  • 这里是一个我需要的好例子(多参数作为关联数组传递,有一些细节):https://stackoverflow.com/a/53218523/7668448

(注意,您只需在服务提供商上创建一个函数,并且您有自己的指令,)

那么,如何在全球范围内共享功能呢?创建并使用全局辅助对象。通过创建包含所有帮助程序(函数)的文件。然后使用编写器**自动加载**。或通过服务提供商绑定一次include_。

>

  • 作曲家自动加载:https://stackoverflow.com/a/49549907/7668448

    通过服务提供商绑定:https://stackoverflow.com/a/32422699/7668448

  •  类似资料:
    • 问题内容: 我正在阅读Laravel Blade 文档,但无法弄清楚如何在模板内分配变量以供以后使用。我不能这样做,因为那会回显“任何内容”,而我不希望那样。 我知道我可以做到,但这并不优雅。 在Blade模板中是否有更好,更优雅的方法来做到这一点? 问题答案: 不建议在视图中进行操作,因此没有刀片标签。如果您确实想在刀片视图中执行此操作,则可以在编写时打开一个php标签,也可以注册一个新的刀片标

    • Laravel中的刀片模板是否有类似Smarty的截断修改器? 我知道我可以在模板中写出实际的php,但我正在寻找更好的东西来编写(我们不要讨论整个php是一个模板引擎)。 例如,我在寻找这样的东西: 我知道我可以通过作曲家使用像树枝这样的东西,但我希望Laravel本身具有内置功能。 如果没有,可以像Smarty提供的那样创建自己的可重用修饰符。我喜欢Blade不会过度使用所有语法,但我认为tr

    • 需要在刀片laravel-value输入中输入变量php,变量i to用于添加i的值,在值=“{$TAREFA-&>TETAPA.i} 为此:value=“{Tarefa->Tetapa1}value=”{Tarefa->Tetapa2}…至10

    • 我能用Eval让它工作...但我们都知道eval是邪恶的。 有人能给我指点一下这方面的教程吗?除了简单的代币替换之外,我似乎找不到任何东西。

    • 我有一些我需要的特定代码,为了能够有某些我不想每次都写的I/O东西,我只想能够添加一个Java类,这样它就已经有了那些代码,我试着做了: 基本上这个东西需要在xml中,但我不知道如何正确地编写它,我以为到处都写${filename}就可以了,但它不起作用。总而言之,我希望文件的名称写在我写“${filename}”的地方,我该怎么做呢?

    • 我有一个自定义函数,我想在刀片模板中传递它。这里是功能: 用法如下: 是否可以将自定义功能传递给刀片模板?非常感谢。