Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Laravel, composer itd
Forum PHP.pl > Forum > Przedszkole
Tomplus
Czy instalował ktoś Laravel lub inne frameworki bez composera?

Composer jest fajny, daje duże możliwości dla twórców, ale niestety czasem brutalna rzeczywistość nie daje dostępu do konsoli [chyba że przez administratora], pytanie jak wtedy zainstalować bez błędów takie aplikacje?

Nie testowałem wszystkich [lub nie robią problemów przy kopiowaniu ręcznym], ale skupię się na Laravel.
Taki laravel robi problemy gdy skopiujemy ręcznie (czyli przez FTP) [kod z githuba] i wywala błędy braku klasy - jeżeli dobrze pamiętam w linii 14 /boostrap/app.php - mimo że w katalogu Vendor jest taka klasa.

Skąd te błędy i co jest pominięte przy takiej starej metodzie instalacji skryptów?


Już nie mówiąc że czasem nie można zainstalować composera bo wersja PHP na serwerze to 5.2, a nie zawsze mamy możliwość zmiany domyślnej wersji PHP na najnowszą tak jak na linuxpl, gdzie jednak spokojnie można ustawić sobie wersje 7.0.*, przy pomocy aliasu.
Pyton_000
- Laravel wymaga PHP > 5.5.9
- Błąd braku klasy jest spowodowany brakiem autoloadera

Jedyne wyjście przy braku konsoli jest pobranie do siebie na maszynkę, odpalenie composer install/update i wgranie wszystkiego na FTP.

Są też protezy w postaci np: http://stackoverflow.com/questions/1721943...ript-in-browser
Tomplus
A jeżeli autoloader istnieje?
Pyton_000
To czy autoloader jest o jedno, ale czy jest wygenerowany poprawnie to inne. Tutaj ewidentnie autoloader nie jest przegenerowany.
Tomplus
Więc pytanie, czy można ten autoloader ustawić bez Composera?

P.S. Wiesz dlaczego magiczna metoda __call nie działa w /app/Http/Controller.php?

  1. class PagesController extends Controller
  2. {
  3. public function start () {
  4. return view('start'); //jako defaultowa strona dziala
  5. }
  6.  
  7. public function __call($name, $var) { //jako dodatkowa, gdzie name wskazuje metodę w Routing -> PageController@nowaStrona
  8. if(!method_exists($this, $name)) {
  9. return 'Metoda nie istnieje.';
  10. } else return 'Metoda istnieje.';
  11. }
  12. }

Pyton_000
pokaż
dump($name, $var);


Co do autoloadera to nie za bardzo,musisz wygenerować go lokalnie i wgrać w całości.
Tomplus
var_dump(), print, echo nie drukuje żadnej treści z wyjątkiem logów Laravela.


Kod
ReflectionException in Route.php line 280:
Method App\Http\Controllers\PagesController::tabele() does not exist
in Route.php line 280
at ReflectionMethod->__construct('App\Http\Controllers\PagesController', 'tabele') in Route.php line 280
at Route->signatureParameters('Illuminate\Database\Eloquent\Model') in Router.php line 859
at Router->substituteImplicitBindings(object(Route)) in Router.php line 844
at Router->substituteBindings(object(Route)) in Router.php line 827
at Router->findRoute(object(Request)) in Router.php line 691
at Router->dispatchToRoute(object(Request)) in Router.php line 675
at Router->dispatch(object(Request)) in Kernel.php line 246
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Kernel.php line 132
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99
at Kernel->handle(object(Request)) in index.php line 53


Pyton_000
Aa widzisz wink.gif Generalnie działa, ale nie działa Ci dla tego że rozwiązywanie metody następuje przez ReflectionMethod, a ta nie bierze pod uwagę metody __call.

Tomplus
To zauważyłem, ale nie potrafię przeskoczyć [bez modyfikowania pliku Router.php] aby __call miało pierwszeństwo w moim kontrolerze. Jest na to jakiś trick?
Pyton_000
Niestety, a może powiedz co chcesz osiągnąć ?
Tomplus
Celem jest to żeby kontroler sprawdzał czy jest dodana strona w sekcji Views. Czyli chce pominąć [a raczej ograniczyć] dodawanie kolejnych elementów w routes.php, czyli po prostu chce mieć stronę error 404, jeżeli nie ma strony w Views.

  1. Route::get($_SERVER['REQUEST_URI'], [
  2. 'as' => substr($_SERVER['REQUEST_URI'],1),
  3. 'uses' => 'PagesController@'.substr($_SERVER['REQUEST_URI'],1),
  4. ]);
  5. Route::get('/', function () {
  6. return view('start');
  7. });


Czyli gdy mam stronę:
- about.php
- contact.php
- rules.php
w Views chę aby samo się wyświetliło, bez dodawania metody do kontrolera

a jeżeli mam:
- userpanel.php
- etc
to chce stworzyć odpowiednią metodę w kontrolerze.
Pyton_000
Czyyyli chcesz za pomocą 1 metody renderować widok jesli nie ma kontrolera, a jeśli jest to go odpalać tak?

Bo możesz zrobić tak że:
Tworzysz catch all pattern w Routes i dodajesz go na koniec pliku.

Tam sprawdzasz czy metoda istnieje, jeśli tak to odpalasz, jak nie to sprawdzasz czy istnieje plik szablonu (jest metoda w \Illuminate\View\Factory::exists) i robisz render.

A żeby odpalić metodę w kontrolerze to tutaj masz kawałek kodu który się przyda.
https://github.com/Pyton/GlobalRouting/blob...iceProvider.php

Przeanalizuj oba pliki i zobacz jak wywołuję kontroler i metodę.
Tomplus
Ten kod rozwiązuje na dzień dobry podstawowy problem.

  1. Route::any('{all}', function($uri)
  2. {
  3. return View::make('start');
  4. })->where('all', '.*');


Reszta jest rozwojowa, dzięki!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.