Laravel 5 — Где определять функции и вызывать их в представлениях & amp; контроллеры

У меня есть следующая функция, и я хочу вызвать ее из поля зрения. В основном я хочу поместить все общие функции в один файл. Я не уверен, где создать этот файл и как вызвать его внутри контроллера и просмотра.

<?php namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use DB;

class CommonController extends Controller {

public function BytesToMB($bytes=0)
{
if(empty($bytes))
return 0;

$kb = ceil($bytes/1024);

$mb = ceil($kb/1024);

return $mb;
}

}

До сих пор я создал CommonController.php в app / Http / Controllers и поместил в него функцию выше.

Затем в другом контроллере я попытался назвать это следующим образом:

use App\Http\Controllers\Common;

class SongsController extends Controller {
public function index($id)
{
echo Common::BytesToMB('7012187');
}
}

Но я получаю ошибку:

 Class 'App\Http\Controllers\Common' not found

2

Решение

Хорошо, новая попытка. Вы пропустили использование полного имени класса и добавили статическое ключевое слово:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use DB;

class CommonController extends Controller {

public static function BytesToMB($bytes=0)
{
if(empty($bytes))
return 0;

$kb = ceil($bytes/1024);

$mb = ceil($kb/1024);

return $mb;
}

}

А потом:

<?php
namespace App\Http\Controllers;

// You do not need to define this, if you are in the same namespace
use App\Http\Controllers\CommonController;

class SongsController extends Controller {
public function index($id)
{
echo CommonController::BytesToMB('7012187');
}
}

Еще одно решение ООП — использовать функцию из родительского класса:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use DB;

class CommonController extends Controller {

protected function BytesToMB($bytes=0)
{
if(empty($bytes))
return 0;

$kb = ceil($bytes/1024);

$mb = ceil($kb/1024);

return $mb;
}

}

А потом:

<?php
namespace App\Http\Controllers;

// You do not need to define this, if you are in the same namespace
use App\Http\Controllers\CommonController;

class SongsController extends CommonController {

public function index($id)
{
echo $this->bytesToMB('7012187');
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]