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

时间:2017-10-19 04:05:11

标签: php laravel laravel-5

我正在为在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 个答案:

答案 0 :(得分:0)

使用Controller和刀片视图方法。

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');
});

尝试使用此功能。这很容易也很干净。

答案 1 :(得分:0)

(最好在控制器中实现该操作,您可以创建一个帮助器类,通过服务提供者将其绑定,然后使用它)

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

@php
    //
@endphp

与以下内容完全相同:

<?php

?>

如果您需要共享全局变量的最佳方法是使用视图外观 share()方法,然后在服务提供商https://laravel.com/docs/5.7/views#passing-data-to-views

用例的例子:布局的嵌套结构=>用短名称保存全局变量,该变量指向更大的树遍历名称(+当我们更改结构时易于维护,只需执行一次)。例如:

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()
    {
        //
    }
}

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

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

还用于共享变量知道我们可以在布局视图中简单地使用@php @phpend(它将在所有包含它的部分和扩展它的对象上可用)。因此,您知道@include和@ yield,@ extend的本质。但是,这不是最佳做法,也不建议这样做。建议使用上面的帮助程序View :: share()。

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

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

那全球共享功能又如何呢? 创建并使用全局帮助器。通过创建一个包含所有帮助程序(功能)的文件。然后使用 co <​​/ strong> mposer **自动加载**。或通过服务提供商绑定 include_once