Как поделиться одним методом для всех контроллеров в Laravel? - PullRequest
1 голос
/ 02 ноября 2019

Как поделиться одним методом для всех контроллеров с различным DI, видом и параметрами? Мне нужно что-то вроде этого:

public function method(Model $model)
    {
        $baseData = [
            'model' => $model,
            'route' => route('$route', [$param => $model]),
        ];

        return view($view);
    }

Ответы [ 2 ]

5 голосов
/ 02 ноября 2019

Все контроллеры расширяются App\Http\Controllers\Controller, поэтому вы можете просто разместить его там

<?php

namespace App\Http\Controllers;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    public function method(Model $model, $route, $param, $view)
    {
        // Declared but not used
        $baseData = [
            'model' => $model,
            'route' => route($route, [$param => $model]),
        ];

        return view($view);
    }
}

и использовать его с $this->method()

Например, в HomeController

<?php

namespace App\Http\Controllers;

use App\User;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        $user = User::first();
        return $this->method($user, 'home', 'user', 'welcome');
    }
}

Теперь доступ к domain.tld/home вернет welcome представление

Надеюсь, это поможет

0 голосов
/ 02 ноября 2019

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

1.создать сервис с помощью команды artisan php artisan make: service_name и определить функцию, которая будет использоваться всеми контроллерами в вашем проекте.

после предоставления услуги вам необходимо зарегистрировать эту услугу с provider.make провайдером с помощью команды artisan. php artisan make provider: provider_name, и вы увидите 2 регистра функций и функцию регистра загрузки, используемую для регистрации созданной вами службы и загрузки для службы регистрации уже вызовов

зарегистрируйте службу, подобную этой

public function register()
    {
         $this->app->bind('App\Services\servicename', function( $app ){
            return new serviceclassname;
        });
    }

3. Перейдите в конфигурационную папку, откройте app.php, где вы получите массив провайдеров. В этом провайдере вы должны определить своего провайдера как App \ Providers \ providerclassname :: class,

вызывайте эту службу в контроллерах, например, используйте App \ Services \ serviceclassname;

public function functionname(serviceclassname serviceobject)
{
  serviceobject->functionname();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...