OTUS - "फ्रेमवर्क लारवेल " से एक नया पाठ्यक्रम शुरू होने तक कुछ दिन शेष हैं। पाठ्यक्रम की शुरुआत की प्रत्याशा में, हम लारवेल में मूल अवधारणाओं पर लेखक के प्रकाशन के अंतिम भाग को साझा करते हैं। महत्वपूर्ण: प्रकाशनों की यह श्रृंखला पाठ्यक्रम के शैक्षिक कार्यक्रम से संबंधित नहीं है और शुरुआती लोगों के लिए थोड़ी उपयोगी सामग्री है । पाठ्यक्रम कार्यक्रम यहां पाया जा सकता है ।
पिछले
लेख में, हमने एक गैलरी लिखना शुरू किया जिसमें एक उपयोगकर्ता लॉग इन कर सकता है और पंजीकरण कर सकता है, एक विवरण, कवर और शीर्षक के साथ एल्बम बना सकता है। निर्मित एप्लिकेशन में हमारे
view
का प्राथमिक मूल्य है और अब इसे थोड़ा विस्तारित करना आवश्यक है।
इसके अलावा, मौजूदा कोड थोड़ा सुधार के लायक है:
हमारे पास पहले से ही दो नियंत्रक हैं -
AlbumController
और
AlbumController
। स्ट्रिंग्स के साथ काम करने के लिए जिम्मेदार एक अतिरिक्त वर्ग का आयात जोड़ें:
use Illuminate\Support\Str;
और हमारे डेटाबेस में एक यादृच्छिक छवि नाम उत्पन्न करने के लिए जिम्मेदार लाइन को बदलें:
$random_name = Str::random(8);
इसके अलावा, अब यह हमारे एप्लिकेशन की विश्वसनीयता बढ़ाने के लिए माइग्रेशन कोड को थोड़ा बदलने के लायक है, क्योंकि उपयोगकर्ता को हमारे
description
क्षेत्र को खाली छोड़ने का अधिकार होना चाहिए (अन्यथा डायनामाइट वाला लारवेल हमें एक त्रुटि की सूचना देगा)। आइए छवि तालिका से जुड़े माइग्रेशन में जाएं, और छवि विवरण से संबंधित रेखा को इस एक तक ठीक करें:
$table->string('description')->nullable();
खैर, आवेदन के "रीफैक्टरिंग" के साथ समाप्त हो गया है। इसके बाद, आपको हमारे एप्लिकेशन का लुक पूरा करना होगा। एक फॉर्म बनाएँ जिसमें उपयोगकर्ता अपने एल्बम बनाने में सक्षम होगा:
addimage.blade.php
फ़ाइल
@include('includes.header') <body> @include('includes.nav') <div class="container" style="text-align: center;"> <div class="span4" style="display: inline-block; margin-top:100px;"> @if (isset($errors) && $errors->has('')) <div class="alert alert-block alert-error fade in"id="error-block"> <?php $messages = $errors->all('<li>:message</li>'); ?> <button type="button" class="close"data-dismiss="alert">×</button> <h4>Warning!</h4> <ul> @foreach($messages as $message) {{$message}} @endforeach </ul> </div> @endif <form name="createnewalbum" method="POST"action="{{route('create_album')}}" enctype="multipart/form-data"> {{ csrf_field() }} <fieldset> <legend> </legend> <div class="form-group"> <label for="name"> </label> <input name="name" type="text" class="form-control"placeholder=" " value="{{old('name')}}"> </div> <div class="form-group"> <label for="description"> </label> <textarea name="description" type="text"class="form-control" placeholder=" ">{{old('descrption')}}</textarea> </div> <div class="form-group"> <label for="cover_image"> </label> {{Form::file('cover_image')}} </div> <button type="submit" class=«btn btn-default">!</button> </fieldset> </form> </div> </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0-rc1/js/bootstrap.min.js"></script> </body> </html>
आपको याद दिला दूं कि पृष्ठ के शीर्ष पर
includes
हमारे पास नेविगेशन और लाइब्रेरी का उपयोग किया गया है, जिन्हें पिछले भाग में वर्णित किया गया था।
इसके अलावा, हमें
album.blade.php
.
album.blade.php
के लुक को
album.blade.php
@include('includes.header') <body> @include('includes.nav') <div class="container"> <div class="starter-template"> <div class="media"> <img class="media-object pull-left"alt="{{$album->name}}" src="/albums/{{$album->cover_image}}" width="350px"> <div class="media-body"> <h2 class="media-heading" style="font-size: 26px;"> :</h2> <p>{{$album->name}}</p> <div class="media"> <h2 class="media-heading" style="font-size: 26px;"> :</h2> <p>{{$album->description}}<p> <a href="{{route('add_image',array('id'=>$album->id))}}"><button type="button"class="btn btn-primary btn-large"> </button></a> <a href="{{route('delete_album',array('id'=>$album->id))}}" onclick="return confirm(' ?')"><button type="button"class="btn btn-danger btn-large"> </button></a> </div> </div> </div> </div> <div class="row"> @foreach($album->Photos as $photo) <div class="col-lg-3"> <div class="thumbnail" style="max-height: 350px;min-height: 350px;"> <img alt="{{$album->name}}" src="/albums/{{$photo->image}}"> <div class="caption"> <p>{{$photo->description}}</p> <p> : {{ date("d FY",strtotime($photo->created_at)) }}at {{ date("g:ha",strtotime($photo->created_at)) }}</p> <a href="{{route('delete_image',array('id'=>$photo->id))}}" onclick="returnconfirm(' ?')"><button type="button"class="btn btn-danger btn-small"> </button></a> <p> :</p> <form name="movephoto" method="POST"action="{{route('move_image')}}"> {{ csrf_field() }} <select name="new_album"> @foreach($albums as $others) <option value="{{$others->id}}">{{$others->name}}</option> @endforeach </select> <input type="hidden" name="photo"value="{{$photo->id}}" /> <button type="submit" class="btn btn-smallbtn-info" onclick="return confirm(' ?')"> </button> </form> </div> </div> </div> @endforeach </div> </div> <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0-rc1/js/bootstrap.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> </body> </html>
इसके अलावा, हम अपने रूटिंग को अपडेट कर सकते हैं, उदाहरण के लिए,
nav.blade.php
:
<li><a href="{{URL::route('create_album_form')}}"> </a></li>
एक नए और अधिक फैशनेबल विकल्प के लिए:
<li><a href="{{route('create_album_form')}}"> </a></li>
दूसरी ओर, पिछले संस्करण में 6 लारवेल पर काम किया गया था। तो, हमारे पास पहले से ही एक फॉर्म है जिसमें उपयोगकर्ता एल्बम में फ़ोटो जोड़ सकता है, और हमारे एल्बम
view
मुख्य
view
। अगला, हमें एक नियंत्रक जोड़ने की आवश्यकता है जो एक फोटो को संसाधित करने के लिए जिम्मेदार होगा।
इसलिए, हम एक नियंत्रक को व्यक्तिगत फ़ोटो के साथ काम करने के लिए जिम्मेदार बनाते हैं:
php artisan make:controller ImageController
तो, हमारे अंदर क्या होना चाहिए:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\MessageBag; use Validator;

पंजीकरण और प्राधिकरण
फिलहाल, हमारा आवेदन लगभग तैयार है। हालाँकि, हमें अभी भी अपने एप्लिकेशन में पंजीकरण करने, लॉग आउट करने और मौजूदा खाते में लॉग इन करने की क्षमता को कसने की आवश्यकता है।
पिछले भाग में, हम पहले ही दिखा चुके हैं कि हमारा
includes/nav.blade.php
कैसा दिखता है। क्योंकि हम चाहते हैं कि
लॉगिन और
बटन तब दिखाई दें जब उपयोगकर्ता ने अभी तक पंजीकृत नहीं किया है, और जब वह हमारे साथ पंजीकृत हो तो
लॉग आउट करें बटन।
तो, यह है कि अब हम सूची में
includes/nav.blade.php
कैसे
includes/nav.blade.php
:
<ul class="nav navbar-nav"> @if (Auth::check()) <li> <button type="button" class="btn btn-primary"> <!-- , -> --> {{{ Auth::user()->name}}} </button> </li> <li><a href="{{route('create_album_form')}}"> </a></li> @else <!-- --> <li><a href="{{route('register')}}"></a></li> <li><a href="{{route('login')}}"></a></li> @endif @if (Auth::check()) <!-- , --> <!-- --> <li> <a href="{{url('/logout') }}" onclick="event.preventDefault(); document.getElementById('logout-form').submit();"> </a> <form id="logout-form" action="{{ url('/logout') }}" method="POST" style="display: none;"> {{ csrf_field() }} </form> </li> @endif </ul>
Auth::check
का उपयोग करना
Auth::check
निर्माण और प्राथमिक
Auth::check
if else
, हम अपने
view
में परिवर्तन का निर्माण कर सकते
view
, इस पर निर्भर करता है कि हमारा उपयोगकर्ता पंजीकृत है या नहीं।
हालांकि, मॉडल और नियंत्रक बनाने से पहले
view
परिवर्तन के साथ, हम इंजन से थोड़ा आगे चलते हैं। हमारे प्रमाणीकरण को बनाने के लिए, हम सभी तैयार किए गए और त्वरित समाधानों का उपयोग करेंगे जो लारवेल 6 में हैं।
तो,
उपयोगकर्ता मॉडल के बारे में - हम बॉक्स में आने वाले का उपयोग करेंगे। एक ओर, यह स्पष्ट रूप से एक पूर्ण अनुप्रयोग के लिए पर्याप्त नहीं है, दूसरी तरफ - मैं खुद को एक विशिष्ट अनुप्रयोग के दायरे में सीमित नहीं करना चाहता। आप किस तरह की गैलरी चाहते हैं? एक उपयोगकर्ता अपने निजी एल्बम कहां बना सकता है जो किसी के लिए सुलभ नहीं है? या हर कोई अपनी तस्वीरें कहाँ साझा करता है? हमारे आवेदन में हमारी सीमाएँ नहीं होंगी - मुझे लगता है कि पाठक अपने स्वाद और रंग के बिना किसी भी समस्या के उन्हें समाप्त करने में सक्षम होंगे।
इसलिए, Laravel 6 में, प्रमाणीकरण बनाना और भी आसान हो गया है। हम अपने आवेदन की कमांड लाइन पर जाते हैं:
composer require laravel/ui —dev
जो हमें आवश्यक पैकेज देता है। अब बनाएं:
php artisan ui:auth
यह टीम हमें क्या देती है? सबसे पहले, हमारे पास
resources/views
में एक नया
resources/views
फ़ोल्डर है, जिसमें हमारे पास सभी
views
जो उपयोगकर्ता को अधिकृत करने और उसे पंजीकृत करने के लिए आवश्यक हो सकते हैं:
login
,
register
और
verify
।
passwords
रीसेट करने और पुनर्प्राप्त करने के लिए समर्पित एक
passwords
सबफ़ोल्डर भी है।
Http/Controllers
फ़ोल्डर में, हमारे पास
HomeController
, जिसे उपयोगकर्ता पंजीकरण के बाद होम पेज पर रीडायरेक्ट करने की आवश्यकता है। हमारे पास एक सबफ़ोल्डर
layouts
भी होगा, जिसमें
app.blade.php
होगा, जिसे हम आज पार्स नहीं करेंगे, लेकिन यह स्क्रैच से बने एप्लिकेशन के लिए एक उत्कृष्ट आधार हो सकता है।
जनरेट किए गए ब्लेड टेम्प्लेट में पहले से
Bootstrap
लिए एक प्रारंभिक लेआउट है। हमारे पास पहले से ही
header.blade.php
.
header.blade.php
में जुड़ा हुआ है।
इसके अलावा, हमने
routes/web.php
में थोड़ा रूटिंग अपडेट किया है। निम्नलिखित पंक्तियों को जोड़ा गया था:
Auth::routes(); Route::get('/home', 'HomeController@index')->name('home'); Route::post('/logout', 'Auth\LoginController@logout')->name('logout');
home
रास्ता अपने आप उत्पन्न हो जाता है, और मैंने खुद को
logout
करने के लिए रीडायरेक्ट किया।
जनरेट किए गए टेम्प्लेट पर काम करने के लिए आपके लेआउट के लिए, हम अपने
nav
और
header
को उनसे कनेक्ट करेंगे:
@include('includes.header') <body> @include('includes.nav') @extends('layouts.app')
बढ़िया, अब सब कुछ तैयार है। रजिस्टर करने का प्रयास करें। पासवर्ड पुष्टिकरण भी काम करना चाहिए:


भविष्य में, उपयोगकर्ता यह चुन सकता है कि वह उस सेवा के किस पृष्ठ पर जाना चाहता है (या पाठक अपने आप रीडायरेक्ट कर सकता है, यह बहुत मुश्किल नहीं है) हमें बस एक छोटी सी डिटेल तय करनी है: इसे बनाने के लिए ताकि केवल पंजीकृत और अधिकृत उपयोगकर्ता ही हमारे कीमती एल्बम देख सकें।
ऐसा करने के लिए, हम अपनी रूटिंग में एक शर्त जोड़ते हैं ताकि उपयोगकर्ता एल्बमों तक पहुंचने के लिए लॉग इन करें।
हमारे
web.php
अपडेट करना:
Route::get('/', array('as' => 'index','uses' => 'AlbumsController@getList')) ->middleware('auth');; //middleware http Route::get('/createalbum', array('as' => 'create_album_form','uses' => 'AlbumsController@getForm')) ->middleware('auth');; // Route::post('/createalbum', array('as' => 'create_album','uses' => 'AlbumsController@postCreate')) ->middleware('auth');; // Route::get('/deletealbum/{id}', array('as' => 'delete_album','uses' => 'AlbumsController@getDelete')) ->middleware('auth');; // Route::get('/album/{id}', array('as' => 'show_album','uses' => 'AlbumsController@getAlbum')) ->middleware('auth');; //
मूल रूप से, इस स्तर पर हम पहले से ही खत्म कर सकते हैं। मैं इसे पाठक तक छोड़ दूंगा कि वह कौन सा आवेदन करना चाहता है: निजी एल्बमों या सार्वजनिक लोगों के साथ। विशुद्ध रूप से सैद्धांतिक रूप से, एप्लिकेशन का उपयोग पहले से ही किया जा सकता है यदि आपने पंजीकरण की संभावना को देखा और सीधे डेटाबेस में एक उपयोगकर्ता को अलग से बनाया - उदाहरण के लिए, यदि आप और आपके सहयोगी आपके निजी एल्बम को व्यवस्थित करने जा रहे हैं और किसी कारण से अन्य सेवाओं का उपयोग नहीं करना चाहते हैं।
ध्यान देने के लिए आप सभी का धन्यवाद! हमेशा की तरह, उपयोगी लिंक: