Можно ли передать директиву лезвия, например @if, в строку из laravel

Вот код, который я пробовал в контроллере

$categories = Category::where('categories.name', 'LIKE', '%' . $category_name . '%')
                ->where('categories.category_code', 'LIKE', '%' . $category_code . '%')->get();
            $category_data = $categories->count();
            if ($category_data > 0) {
                $i = 1;
                foreach ($categories as $category) {
                    $output .=
                        '<tr>
                <td>' . $i++ . '</td>
                <td><img src="' . asset($category->photo) . '" class="img-fluid" style="width: 170px; object-fit: cover;"></td>
                <td>' . $category->name . '</td>
                <td>' . $category->category_code . '</td>
                <td><a href="' . route("category.edit", $category->id) . '" class="btn btn-warning">
                                        <i class="icofont-ui-settings icofont-1x"></i>
                                    </a>
                                    @if($delete == "yes")
                                    <form action="' . route("category.destroy", $category->id) . '" method="POST" class="d-inline-block" onsubmit="return confirm("Are you sure to delete the item?")">
                                        @csrf
                                        @method("DELETE")
                                        <button class="btn btn-outline-danger" type="submit"><i class="icofont-close icofont-1x"></i></button>
                                    </form>
                                    @endif
                                </td>
                                </tr>';
                }
                return Response($output);

Код в файле блейда, jquery

$('#filtersearch').click(function() {
        var category_name = $('#category_name').val();
        var category_code = $('#category_code').val();
        // alert(category_name)
        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        })

        $.get('/categorysearch', {
                category_name: category_name,
                category_code: category_code
            },
            function(data) {
                $('#filter_data').html(data);
            })
    })

вывод выглядит так: все директивы лезвия отображаются как строка

Есть ли способ развить это, любое решение было бы очень полезным. Спасибо!

не парень laravel, но кажется, что @if является системным макросом шаблонов, так что, возможно, если вы перейдете к теме и обнаружите, где отображается эта часть, и опустите экранирование или какой-либо другой способ вызвать систему шаблонов, которая решит эту проблему.

Kazz 09.04.2022 13:06
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Введение в технологический стек Twitch
Введение в технологический стек Twitch
В этой статье мы подробно рассмотрим стек Twitch, который подразделяется на следующий набор технологий:
8 полезных HTML-тегов, которые лучше использовать вместо <div>
8 полезных HTML-тегов, которые лучше использовать вместо <div>
Когда я только начинал изучать html, я использовал div для всего, это был один из первых тегов, которые я выучил, и казалось, что он работает в любой...
HTML5: API локального хранилища (Local Storage)
HTML5: API локального хранилища (Local Storage)
LocalStorage - это простой способ хранения данных в браузере пользователя.
Доступность HTML - программирование с инклюзивной перспективой
Доступность HTML - программирование с инклюзивной перспективой
Представьте, что вы хотите поехать на пляж. Представьте, что вы упорно трудились весь год и заслужили это. Прибыв на место, вы обнаруживаете, что...
Именование классов CSS: Конвенция именования BEM
Именование классов CSS: Конвенция именования BEM
Сопровождаемость кода, сама по себе, является пульсирующим эффектом нескольких факторов. Когда часть программного обеспечения читабельна, ясна,...
1
1
38
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы должны использовать конкатенацию в laravel для разбора строки:


    foreach ($categories as $category) {
                $output .=
                    '<tr>
    <td>' . $i++ . '</td>
    <td><img src="' . asset($category->photo) . '" class="img-fluid" style="width: 170px; object-fit: cover;"></td>
    <td>' . $category->name . '</td>
    <td>' . $category->category_code . '</td>
    <td><a href="' . route("category.edit", $category->id) . '" class="btn btn-warning">
        <i class="icofont-ui-settings icofont-1x"></i>
        </a>';
        if($delete == "yes"){
            $output .= '<form action="' . route("category.destroy", $category->id) . '" method="POST" class="d-inline-block" onsubmit="return confirm("Are you sure to delete the item?")">';
            $output .= '<input type="hidden" name="_token" value="'.csrf_token().'">';
            $output .= '<input type="hidden" name="_method" value="DELETE"><button class="btn btn-outline-danger" type="submit"><i class="icofont-close icofont-1x"></i></button>
        </form>';
        }
                $output .='</td></tr>';
            }

Начиная с laravel 9.0, вы можете отображать строки лезвия на лету.

use Illuminate\Support\Facades\Blade;

//...

$categories = Category::where('categories.name', 'LIKE', '%' . $category_name . '%')
                ->where('categories.category_code', 'LIKE', '%' . $category_code . '%')->get();
            $category_data = $categories->count();
            if ($category_data > 0) {
                $i = 1;
                foreach ($categories as $category) {
                    $output .=
                        '<tr>
                <td>' . $i++ . '</td>
                <td><img src="' . asset($category->photo) . '" class="img-fluid" style="width: 170px; object-fit: cover;"></td>
                <td>' . $category->name . '</td>
                <td>' . $category->category_code . '</td>
                <td><a href="' . route("category.edit", $category->id) . '" class="btn btn-warning">
                                        <i class="icofont-ui-settings icofont-1x"></i>
                                    </a>
                                    @if($delete == "yes")
                                    <form action="' . route("category.destroy", $category->id) . '" method="POST" class="d-inline-block" onsubmit="return confirm("Are you sure to delete the item?")">
                                        @csrf
                                        @method("DELETE")
                                        <button class="btn btn-outline-danger" type="submit"><i class="icofont-close icofont-1x"></i></button>
                                    </form>
                                    @endif
                                </td>
                                </tr>';
                }

return Blade::render($output, ['delete' => 'yes']);

Если вы используете laravel 8.x или ниже, вы можете использовать этот пакет Феликсдорн / laravel-рендер-лезвие-строка или другие решения для ответов.

Я думаю, что лучший способ сделать это — использовать метод render(). вы можете создать свой файл представления и передать свои данные и отобразить окончательный HTML-код

Пример

$renderedHtml = view('your_view_file',compact('some_data'))->render();

тогда вы можете ответить своим визуализированным HTML

return Response($renderedHtml );

Я надеюсь, что это полезно

Другие вопросы по теме