Вот код, который я пробовал в контроллере
$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 для разбора строки:
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 );
Я надеюсь, что это полезно
не парень laravel, но кажется, что
@if
является системным макросом шаблонов, так что, возможно, если вы перейдете к теме и обнаружите, где отображается эта часть, и опустите экранирование или какой-либо другой способ вызвать систему шаблонов, которая решит эту проблему.