Как вызвать действие контроллера из Blade в Laravel 5.1?

Я пытаюсь вызвать действие контроллера в представлении в Laravel 5.1, но не могу этого сделать.

Вот что я пробовал до сих пор:

<?php echo BridesController::getPhotographer($data->sender_id);?>

но выдает ошибку Class 'BridesController' not found.


person Amrinder Singh    schedule 14.08.2015    source источник
comment
Чего вы хотите достичь? Наверняка есть лучшие способы, чем выполнение контроллера из представления.   -  person jedrzej.kurylo    schedule 14.08.2015


Ответы (3)


Чтобы отобразить вывод внешнего действия внутри представления, принадлежащего вашему текущему действию, вам нужно вызвать внешнее действие из вашего текущего действия, затем сохранить его вывод в переменной и передать его вашему текущему представлению.

Вызов действий из того же контроллера

Если действие, которое вы хотите отобразить, находится внутри того же контроллера, который вы используете, вы можете вызвать:

$result = $this->action();

return view('my.view',['my_rendered_action'=>$result]);

И затем, внутри вашего представления, просто:

{!! $my_rendered_action !!}

Позаботьтесь о том, чтобы не отображать ничего, что исходит от пользователя, использующего этот метод, потому что {!! !!} теги не пропускают опасные входные данные. Если вам не нужен HTML-код внутри ответа на действие, всегда предпочтительнее использовать вместо этого {{ }}.

Вызов действий с другого контроллера

Если вам нужно разделить метод между несколькими контроллерами, самый чистый способ — создать трейт или задание, реализующее логику, а затем оба контроллера будут использовать трейт или отправлять одно и то же задание.

Пожалуйста, обратитесь к ответу Шэдди на этот вопрос для получения дополнительной информации.

Надеюсь, поможет. ;)

person Rafael Beckel    schedule 15.08.2015

Ты можешь сделать это:

action('BridesController@getPhotographer',$data->sender_id);

Конечно, если вы используете лезвие, вы можете сделать это

{{ action('BridesController@getPhotographer',$data->sender_id) }}

Вы можете проверить это здесь http://laravel.com/docs/5.1/controllers#basic-controllers

person Marcus Jason    schedule 13.11.2015

Если вы создаете свой собственный фасад, вы можете это сделать.

Контроллер:

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Facade;

class BridesController extends Facade {

   protected static function getFacadeAccessor() {
       //what you want
       return 'getPhotographer';
   }

   public static function getPhotographer() {
       return "photographer";
   }

}

//Может быть, это поставщик услуг.

конфиг/app.php

 'BridesController'=>  App\Http\Controllers\BridesController::class,

И тогда вы можете использовать в своем представлении.

<div class="panel-body">
    {{BridesController::getPhotographer()}}
</div>

Я не проверял это, но я думаю, что это должно работать.

person Beller    schedule 10.11.2015